Usage Examples 🚩 | Developer Reference 👩💻 | Authors 👫
license | |
docs | |
tests | |
package |
Injectable is an elegant and simple Dependency Injection framework built with Heart and designed for Humans.
- Autowiring: injection is transparent to the function. Just decorate the function with
@autowired
and annotate parameters withAutowired
, that's it. - Automatic dependency discovery: just call
load_injection_container()
at the root of your project or pass the root path as an argument. All classes decorated with@injectable
will be automatically discovered and ready for injection. - Qualifier overloading: declare as many injectables as you like for a single qualifier or extending the same base class. You can inject all of them just by specifying a
typing.List
toAutowired
:deps: Autowired(List["qualifier"])
. - Transparent lazy initialization: passing the argument
lazy=True
forAutowired
will make your dependency to be initialized only when actually used, all in a transparent fashion. - Singletons: decorate your class with
@injectable(singleton=True)
and only a single instance will be initialized and shared for injection. - Namespaces: specify different namespaces for injectables as in
@injectable(namespace="foo")
and then just use them when annotating your parameters as indep: Autowired(..., namespace="foo")
. - Linters friendly:
Autowired
is carefully designed to comply with static linter analysis such as PyCharm's to preserve the parameter original type hint.
These are just a few cool and carefully built features for you. Check out our docs!