python的依赖注入

jacked的Python项目详细描述


Build StatusPypi versionScrutinizer Code Qualitycodecov

注意:此项目处于alpha状态

roid上的jacked~python

  • 一个轻巧易用的依赖注入框架。
  • 注入包含这些对象的objectsfunctionsclasseslists
  • 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模块都被导入,可注入的是 注册的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
具有相同实体的java JPA关系   java创建Jar文件,复制类路径   多线程如何在ProducerConsumer情况下停止Java线程?   java MBTiles文件有大小限制吗?   java组织。springframework。奥姆。冬眠3。HibernateQueryException HibernateTemplate   java是否会调用onDestroy()?   java Android找不到构建工具   java Hibernate联接列错误:找不到具有逻辑名称的列   电子邮件如何从Java通过电子邮件发送pdf   java无法多次更新FireBase数据库子项   Java:通过HTTP传输Zipfile的内容   AlertDialog中的java自定义操作模式   在java中编写异步调用序列的更好方法是什么?   utf 8在Java中将UTF8转换为ISO88591如何将其保持为单字节   java为进度条设置了一个固定值