Dependency Injector
? Dependency Injector
est un framework d'injection de dépendances pour Python.
Il permet de mettre en œuvre le principe d’injection de dépendances.
Principales fonctionnalités de l' Dependency Injector
:
Factory
, Singleton
, Callable
, Coroutine
, Object
, List
, Dict
, Configuration
, Resource
, Dependency
et Selector
qui vous aident à assembler vos objets. Voir Fournisseurs.yaml
, ini
et json
, des paramètres pydantic
, des variables d'environnement et des dictionnaires. Voir Fournisseur de configuration.mypy
. Voir Saisie et mypy.Cython
. from dependency_injector import containers , providers
from dependency_injector . wiring import Provide , inject
class Container ( containers . DeclarativeContainer ):
config = providers . Configuration ()
api_client = providers . Singleton (
ApiClient ,
api_key = config . api_key ,
timeout = config . timeout ,
)
service = providers . Factory (
Service ,
api_client = api_client ,
)
@ inject
def main ( service : Service = Provide [ Container . service ]) -> None :
...
if __name__ == "__main__" :
container = Container ()
container . config . api_key . from_env ( "API_KEY" , required = True )
container . config . timeout . from_env ( "TIMEOUT" , as_ = int , default = 5 )
container . wire ( modules = [ __name__ ])
main () # <-- dependency is injected automatically
with container . api_client . override ( mock . Mock ()):
main () # <-- overridden dependency is injected automatically
Lorsque vous appelez la fonction main()
la dépendance Service
est assemblée et injectée automatiquement.
Lorsque vous effectuez des tests, vous appelez la méthode container.api_client.override()
pour remplacer le véritable client API par un simulacre. Lorsque vous appelez main()
, le mock est injecté.
Vous pouvez remplacer n'importe quel fournisseur par un autre fournisseur.
Il vous aide également dans une reconfiguration de projet pour différents environnements : remplacez un client API par un stub sur le développement ou la scène.
Avec le Dependency Injector
, l'assemblage d'objets est consolidé dans un conteneur. Les injections de dépendances sont définies explicitement. Cela facilite la compréhension et la modification du fonctionnement d'une application.
Visitez la documentation pour en savoir plus sur l'injection de dépendances et l'inversion de contrôle en Python.
Le package est disponible sur le PyPi :
pip installer l'injecteur de dépendance
La documentation est disponible ici.
Choisissez l'une des options suivantes :
Choisissez l'une des options suivantes :
Le framework repose sur le principe PEP20 (The Zen of Python) :
Explicit is better than implicit
Vous devez spécifier comment assembler et où injecter explicitement les dépendances.
La puissance du framework réside dans sa simplicité. Dependency Injector
est un outil simple pour un concept puissant.
Dependency Injector
sur le GithubDependency Injector
Dependency Injector
develop