2017-03-04 57 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'方法需要传递给构造函数的参数... –