2017-03-04 23 views
2

有一個代碼:在工廠中使用UnityContainer不好嗎?

class MyFactory : IMyFactory 
{ 
    private IUnityContainer _container; 

    public MyFactory(IUnityContainer container) 
    { 
     _container = container; 
    } 

    public IMyInterface Create() 
    { 
     _container.Resolve<IMyInterface>(); 
    } 
} 

我需要使用Unity因爲需要截取的邏輯來解決IMyInterface的。 將Container注入工廠不好嗎?

+0

我希望不會,因爲我也是這樣做的)。不過,我通常會在'Create'方法中解析具體類而不是接口。 –

+0

@ThomasLevesque這取決於情況,但我更喜歡不包括容器。看到我的答案 – Backs

回答

1

常見的方法 - 是的,這很糟糕:)因爲它看起來像service locator antipattern:你通過容器,可以解決一切。很難維護和測試這些代碼。

您可以實現工廠模式是這樣的:

class MyFactory : IMyFactory 
{ 
    private Func<IMyInterface> _myInterface; 

    public MyFactory(Func<IMyInterface> myInterface;) 
    { 
     _myInterface = myInterface; 
    } 

    public IMyInterface Create() 
    { 
     return _myInterface(); 
    } 
} 

所以,你的工廠不成立容器。當你注入你的工廠時,統一容器將生成Func來解決你的課程。

更多信息here在自動工廠部分。

+0

這是一個很好的方法,除了'Create'方法需要傳遞給構造函數的參數... –