一个简单的依赖注入容器

rumple的Python项目详细描述


Pimple启发的简单依赖注入容器。

https://img.shields.io/travis/Komtet/rumple.svg?style=flat-square

安装

使用pip:

# pip install rumple

手动:

$ git clone https://github.com/Komtet/rumple
$ cd rumple
# python setup.py install

用法

fromrumpleimportContainerc1=Container()c2=Container({'param':'value','service':lambda:object()})

定义服务

fromrumpleimportContainerclassService(object):passclassAnotherService(object):def__init__(self,service):self.service=servicecontainer=Container()container['service']=lambda:Service()container['another_service']=lambdac:AnotherService(c['service'])another_service=container['another_service']assertisinstance(another_service,AnotherService)assertanother_service.serviceiscontainer['service']

定义参数

fromrumpleimportContainercontainer=Container()container['parameter']='value'assertcontainer['parameter']=='value'

扩展服务

fromrumpleimportContainerclassService(object):def__init__(self):self.optional_dependency=Nonedefset_optional_dependency(self,dependency):self.optional_dependency=dependencyclassOptionalDependency(object):passdefextend_service(service,container):# Note: you can omit "container" argumentservice.set_optional_dependency(container['optional_dependency'])returnservicecontainer=Container()container['service']=lambda:Service()container['optional_dependency']=lambda:OptionalDependency()container.extend('service',extend_service)

提供者

fromrumpleimportContainer,extend,share,valueclassProvider(object):@share()defservice(self):returnobject()@share('renamed_service')defanother_service(self):returnobject()@share()defservice_for_extend(self):returnobject()@value()deffirst_option(self):return'value_1'@value('second_option_renamed')defsecond_option(self):return'value_2'@value()def_ignored(self):return'value'classAnotherProvider(object):@extend('service_for_extend')defextend_service(self,service_for_extend):assertisinstance(service_for_extend,object)returnstr(object)classSomeLibProvider(object):__prefix__='some_lib.'@share()defservice(self):returnobject()@extend('some_lib.service')defextend(self,service):returnstr(service)container=Container()container.register(Provider())container.register(AnotherProvider(),{'additional_option':'value1'})container.register(SomeLibProvider(),{'additional_option':'value2'})assertisinstance(container['service'],object)assertisinstance(container['renamed_service'],object)assertisinstance(container['service_for_extend'],str)assertcontainer['first_option']=='value_1'assertcontainer['second_option_renamed']=='value_2'assert'_ignored'notincontainerassertcontainer['additional_option']=='value1'assertisinstance(container['some_lib.service'],str)assertcontainer['some_lib.additional_option']=='value2'

遍历容器

fromrumpleimportContainercontainer=Container({'k1':'v1','k2':'v2'})foritemincontainer:print(item)# Output:# ('k1', 'v1')# ('k2', 'v2')

更改日志

0.2.0(2019年1月25日)

  • 能够在提供商中指定供应商前缀
  • 修正inspect.getargspec()否决

0.1.0(2015年7月15日)

  • 首次发布

贡献

  • 分叉并克隆它
  • 创建您的功能分支(git checkout-b awesome feature)
  • 进行更改
  • 如有必要,编写/更新测试
  • 必要时更新readme.md
  • 推动您的分支(Git Push Origin Awesome功能)
  • 发送拉取请求

许可证

麻省理工学院许可证(MIT)

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

推荐PyPI第三方库


热门话题
无JPA的纯Hibernate ORM java SpringBoot配置   安卓会生成一组唯一的java数字   java我的自定义阵列列表每次启动时都会崩溃我不确定为什么会一直崩溃   Java继承;将子类传递给超类的抽象方法   java从没有if语句的数组中获取instanceof type   java中使用对象的温度转换   存储库接口的JavaSpringDataMongoDBeanXML配置   java JAXWS为iBM websphere、iBM web服务客户端添加寻址   数组试图返回Java中两个对象的面积之和   apache Spark java:columnNameOfCorruptRecord和badRecordsPath在加载csv时不工作   java无法创建。txt文件   java Hibernate与MySQL插入查询不一致   不考虑java Hazelcast分布式地图的最大大小   bash Java如何在父进程中设置环境变量