我來自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