在工厂中使用UnityContainer是不是很糟糕?

时间:2017-03-04 00:40:37

标签: .net unity-container

有代码:

class MyFactory : IMyFactory
{
    private IUnityContainer _container;

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

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

我需要使用Unity解析IMyInterface,因为需要拦截逻辑。 将Container注入工厂是不是很糟糕?

1 个答案:

答案 0 :(得分:1)

通常的方式 - 是的,它很糟糕:)因为它看起来像service locator antipattern:你传递容器并且可以解决所有问题。维护和测试此代码很难。

您可以这样实现工厂模式:

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

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

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

所以,你的工厂没有容器。当您注入工厂时,Unity容器将生成Func以解析您的类。

自动工厂部分中的更多信息here