Fast and easy dependency injection framework.
Project description
Basic usage
Create an injectable
Note: If the class needs dependencies, these will be resolved when the instance is retrieved.
If you wish to inject a singleton, use singleton
decorator.
from injection import singleton
@singleton
class Singleton:
""" class implementation """
If you wish to inject a new instance each time, use injectable
decorator.
from injection import injectable
@injectable
class Injectable:
""" class implementation """
If you have a constant (such as a global variable) and wish to register it as an injectable, use set_constant
function.
from injection import set_constant
app = set_constant(Application())
Inject an instance
To inject one or several instances, use inject
decorator.
Don't forget to annotate type of parameter to inject.
from injection import inject
@inject
def my_function(instance: Injectable):
""" function implementation """
If inject
decorates a class, it will be applied to the __init__
method.
Especially useful for dataclasses:
Note: Doesn't work with Pydantic
BaseModel
because the signature of the__init__
method doesn't contain the dependencies.
from dataclasses import dataclass
from injection import inject
@inject
@dataclass
class DataClass:
instance: Injectable = ...
Get an instance
Example with get_instance
function:
from injection import get_instance
instance = get_instance(Injectable)
Example with get_lazy_instance
function:
from injection import get_lazy_instance
lazy_instance = get_lazy_instance(Injectable)
# ...
instance = ~lazy_instance
Inheritance
In the case of inheritance, you can use the decorator parameter on
to link the injection to one or several other
classes.
Warning: if the child class is in another file, make sure that file is imported before injection.
See load_package
function.
Example with one class:
from injection import singleton
class A:
...
@singleton(on=A)
class B(A):
...
Example with several classes:
from injection import singleton
class A:
...
class B(A):
...
@singleton(on=(A, B))
class C(B):
...
Recipes
A recipe is a function that tells the injector how to construct the instance to be injected. It is important to specify the return type annotation when defining the recipe.
from injection import singleton
@singleton
def my_recipe() -> Singleton:
""" recipe implementation """
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for python_injection-0.6.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 065a44686014aa14d68f18b76834a1fb3764f10fed122f7a4555da182f0b4ec3 |
|
MD5 | 4cb80817a44a7d595e315c9c3e5f1fbc |
|
BLAKE2b-256 | 315e8c18fd72a39399a6bbcdecba9864049c0c3cfb570fcfa5bccdd5883e254e |