Dependency Injector
? Dependency Injector
es un marco de inyección de dependencia para Python.
Ayuda a implementar el principio de inyección de dependencia.
Características clave del Dependency Injector
:
Factory
, Singleton
, Callable
, Coroutine
, Object
, List
, Dict
, Configuration
, Resource
, Dependency
y Selector
que ayudan a ensamblar sus objetos. Ver Proveedores.yaml
, ini
y json
, configuraciones pydantic
, variables de entorno y diccionarios. Consulte Proveedor de configuración.mypy
. Consulte Mecanografía y 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
Cuando llama a la función main()
, la dependencia Service
se ensambla e inyecta automáticamente.
Cuando realiza pruebas, llama al método container.api_client.override()
para reemplazar el cliente API real con un simulacro. Cuando llamas main()
, se inyecta el simulacro.
Puede anular cualquier proveedor con otro proveedor.
También le ayuda en un proyecto de reconfiguración para diferentes entornos: reemplace un cliente API con un código auxiliar en el desarrollo o escenario.
Con Dependency Injector
, el ensamblaje de objetos se consolida en un contenedor. Las inyecciones de dependencia se definen explícitamente. Esto hace que sea más fácil comprender y cambiar el funcionamiento de una aplicación.
Visite los documentos para saber más sobre la inyección de dependencia y la inversión de control en Python.
El paquete está disponible en PyPi:
pip install dependencia-inyector
La documentación está disponible aquí.
Elija uno de los siguientes:
Elija uno de los siguientes:
El marco se basa en el principio PEP20 (El Zen de Python):
Explicit is better than implicit
Debe especificar cómo ensamblar y dónde inyectar las dependencias explícitamente.
El poder del marco está en su simplicidad. Dependency Injector
es una herramienta simple para un concepto poderoso.
Dependency Injector
en GithubDependency Injector
Dependency Injector
develop