Comments (5)
I'm not entirely sure I get your use case, but I think the one of the closest thing we have is creating new types with NewType
and binding different NewType
s to different instances. I've used that successfully. If the modules don't interact with each other, having parent/child injectors is another way of partially sharing injector configuration. Would any of those work for you?
from injector.
NewType
for sure will work but it introduces boilerplate, even though minimal, so it's not optimal.
To demonstrate my use case:
# common.container
class Container(injector.Module):
def configure(self, binder):
binder.bind(MessageBus, to=MessageBus)
# module_a.container
class Container(injector.Module):
def configure(self, binder):
binder.bind(SomeCommonBase, to=module_a.Concrete)
container = injector.Injector([Container(), common.container.Container()])
# module_b.container
class Container(injector.Module):
def configure(self, binder):
binder.bind(SomeCommonBase, to=module_b.Concrete)
container = injector.Injector([Container(), common.container.Container()])
# common.message_bus
class MessageBus:
@injector.inject
def __init__(self, module_specific_instance: SomeCommonBase):
...
from injector.
Hey @r2rstep, I'm also not entirely surely I understand this.
In the code sample you included above, where would the "pick the Injector instance" logic go?
I feel like this misses some context and possibly a clarification of what problem is being solved here. In general I'd not expect a piece a single application context to define or use multiple Injector instances.
from injector.
After re-reading I think I understand it better now. I believe if you want to dispatch to multiple Injector instances you may need to do it manually for the time being (get access to the instance, call get()
on it).
I'd maybe try to put all of that in a single Injector instance so your various modules could coexist there but I understand it may not be feasible.
from injector.
yeah, it's more like a feature request :) The case is for modular monolith where each module should define own dependencies.
Anyway, thanks for taking time to respond :)
from injector.
Related Issues (20)
- Bind a provider to multiple interfaces?
- Binding multiple interfaces to same implementation HOT 2
- Singletons for parent/child injectors are order-dependent HOT 9
- Maintainer status? HOT 2
- Potential resource leak HOT 3
- Binding of Annotated types does not work as one would expect HOT 8
- Is it an antipattern to have multiple instances of Injector (because of missing Generics support)? HOT 2
- Testing example in docs is not working. ImportError: cannot import name 'with_injector' from 'injector' HOT 6
- FastAPI support HOT 2
- Injection of two abstract classes and annotation
- Question about the example code and intended use HOT 2
- Differentiating between multiple providers HOT 4
- Providing different instances of the same type in the same module HOT 1
- Issue with ClassAssistedBuilder HOT 4
- Implementation of SessionScope Needed
- [Docs] No declarations of type `Name` and `Description` on Docs injection sample HOT 1
- How to handle resources? HOT 4
- `injector.Injector.create_object` on pydantic-settings `BaseSettings` does not without factory function in Injector HOT 4
- Nonresolvable Type Hint on Non-Injected Argument Causes Error HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from injector.