Python注入
我现在的处境是这样的。我有一个服务类,它使用一个逻辑组件,它使用一个存储对象 因此: 服务-->逻辑-->存储 箭头表示“使用”关系 当然,我正在尝试使用依赖注入,我正在使用Python注入,python,dependency-injection,Python,Dependency Injection,我现在的处境是这样的。我有一个服务类,它使用一个逻辑组件,它使用一个存储对象 因此: 服务-->逻辑-->存储 箭头表示“使用”关系 当然,我正在尝试使用依赖注入,我正在使用injector包() 这里的目标是提供不同版本的服务实例,这些服务实例将使用不同的逻辑实例,所使用的存储实例不同 我认为这是一种表现 现在,重点是:我不知道如何将注入应用到多个级别。这里有一个小例子: from injector import inject, Injector, Module, Key # My exam
injector
包()
这里的目标是提供不同版本的服务实例,这些服务实例将使用不同的逻辑实例,所使用的存储实例不同
我认为这是一种表现
现在,重点是:我不知道如何将注入应用到多个级别。这里有一个小例子:
from injector import inject, Injector, Module, Key
# My example
# Standard service using a ConsumerLogic which is requesting a Storage object
class Storage:
pass
class Storage2:
pass
class Logic:
def __init__(self, storage):
self.storage = storage
class Service:
def __init__(self, logic):
self.logic = logic
通过使用BoundedKey类,我解决了一些问题:
from injector import inject, Injector, Module, Key
# My example
# Standard service using a ConsumerLogic which is requesting a Storage object
LogicKey = Key('Logic')
class Storage:
pass
class Storage2:
pass
class Logic:
@inject
def __init__(self, storage: Storage):
self.storage = storage
class Service:
@inject(logic=LogicKey)
def __init__(self, logic):
self.logic = logic
class Configuration(Module):
def configure(self, binder):
binder.bind(
LogicKey,
to=Logic(storage=Storage())
)
要使用Instance服务,我可以:
inj = Injector()
inj.get(Service)
获取该服务的特定版本
如何使get
方法返回不同版本的服务?我无法用模块方法解决一些问题。但我肯定错过了什么
提前感谢您的帮助。为什么需要注射?只需将您想要的实例传递给您想要的构造函数,所有内容都将按照您想要的方式进行配置。除非你有一个真正的用例,否则没有必要获得所有的enterprisey。它是从一个卡夫卡消费者中提取出来的,采用六边形架构设计,1)将消费者的逻辑从样板文件中分离出来,让消费者运行,2)使其易于扩展,这样你仍然可以使用消费者基础设施,只需提供新的服务IStorage接口的适配器。当然,给你一个很快的解释。快就可以了。重要的是你们明白为什么你们需要它,我同意。此外,我正在将框架层与应用程序层紧密分离,DI在这方面会非常有帮助。