python的依赖注入
jacked的Python项目详细描述
注意:此项目处于alpha状态
roid上的jacked~python
- 一个轻巧易用的依赖注入框架。
- 注入包含这些对象的objects,functions,classes或lists。
- 让jacked自动发现包中的可注射性。
- 果汁上的松耦合!
- 非常适合测试代码!
安装
pip install jacked
用法
注入实例
要注入实例,请使用injectable
装饰符标记类:
fromjackedimportinjectable@injectableclassCat:defsound(self):return'meow'
现在可以在任何地方的函数中注入它。将inject
装饰器置于
函数或方法的顶部。让jacked知道要按类型注入的类型
提示您的参数:
@injectdefwhat_sound_does_it_make(cat:Cat):print(cat.sound())what_sound_does_it_make()
注入功能
注入函数的工作原理类似。只要确保你的函数有 正确的类型提示:
@injectabledefsome_func(x:int,y:int)->str:returnf'The sum of {x} and {y} is {x + y}'
与实例一样,注入如下:
@injectdefdo_something(func:Callable[[int,int],str]):print(func(21,21))do_something()
注入类
假设我们有和以前一样的Cat
可注射的,我们可以注射
该类如下:
fromtypingimportType@injectdefdo_something(cat_type:Type[Cat]):print(cat_type.__name__)do_something()
注入列表
假设我们有以下两种同一母体的可注射性:
classAnimal(ABC):@abstractmethoddefsound(self):raiseNotImplementedError@injectableclassCat(Animal):defsound(self):return'meow'@injectableclassDog(Animal):defsound(self):return'bark'
现在可以将它们插入列表:
@injectdefwhat_sound_does_it_make(animals:List[Animal]):foranimalinanimals:print(f'The {animal.__class__.__name__} does {animal.sound()}')what_sound_does_it_make()
你也可以通过暗示
List[Type[...]]
或List[Callable[...]]
(由
注射目标)。
单重态
您可以将可注射项注释为singleton,这意味着如果可注射项是 一个类,只注入一个实例:
@injectable(singleton=True)classDog(Animal):defsound(self):return'bark'
自动发现
可以让jacked使用
discover
函数:
fromjackedimportdiscoverdiscover('path/to/your/package')
该包中的所有python模块都被导入,可注入的是 注册的。