python dependency injector
1.0.0
Dependency Injector
? Dependency Injector
是 Python 的依赖注入框架。
它有助于实现依赖注入原则。
Dependency Injector
的主要特点:
Factory
、 Singleton
、 Callable
、 Coroutine
、 Object
、 List
、 Dict
、 Configuration
、 Resource
、 Dependency
和Selector
提供程序来帮助组装对象。请参阅提供者。yaml
、 ini
和json
文件、 pydantic
设置、环境变量和字典中读取配置。请参阅配置提供程序。mypy
友好。请参阅键入和 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
当您调用main()
函数时, Service
依赖项会自动组装和注入。
当您进行测试时,您可以调用container.api_client.override()
方法来用模拟替换真实的API客户端。当您调用main()
时,模拟会被注入。
您可以用另一个提供程序覆盖任何提供程序。
它还可以帮助您针对不同环境重新配置项目:用开发或阶段上的存根替换 API 客户端。
使用Dependency Injector
,对象组装被整合到一个容器中。依赖注入是明确定义的。这使得理解和改变应用程序的工作方式变得更容易。
请访问文档以了解有关 Python 中的依赖注入和控制反转的更多信息。
该软件包在 PyPi 上可用:
pip install 依赖注入器
该文档可在此处获取。
选择以下选项之一:
选择以下选项之一:
该框架遵循 PEP20(Python 之禅)原则:
Explicit is better than implicit
您需要显式指定如何组装以及在何处注入依赖项。
该框架的强大之处在于其简单性。 Dependency Injector
是一个功能强大的概念的简单工具。
Dependency Injector
加注星标Dependency Injector
启动一个新项目Dependency Injector
develop
分支发起拉取请求