我来自C#世界,所以我的看法可能有点偏斜。我期待在Python中使用DI,但是我注意到了一个图书馆的趋势,他们似乎都依赖于服务定位器。也就是说,您必须将您的对象创建与框架绑定,例如injectlib.build(MyClass)
才能获得MyClass
的实例。Python无需依赖服务定位器就可以完成DI吗?
这里是我的意思的例子 -
from injector import Injector, inject
class Inner(object):
def __init__(self):
self.foo = 'foo'
class Outer(object):
@inject(inner=Inner)
def __init__(self, inner=None):
if inner is None:
print('inner not provided')
self.inner = Inner()
else:
print('inner provided')
self.inner = inner
injector = Injector()
outer = Outer()
print(outer.inner.foo)
outer = injector.get(Outer)
print(outer.inner.foo)
有没有在Python的方式来创建一个类,并自动推断基于参数名称的依赖类型?因此,如果我有一个名为my_class
的构造函数参数,那么将会注入一个MyClass
的实例。我想问的原因是我没有看到如何将依赖注入到通过第三方库自动创建的类中。
很好的答案!在过去的几个月里,我一直在稳步地做Python,而不是像我从哪里来(C#)那样,Python确实不需要DI。事实上,我讨厌混合两者。 – 2015-07-20 12:16:18