工厂里用UnityContainer不好吗?

Is it bad to use UnityContainer in factories?

有代码:

class MyFactory : IMyFactory
{
    private IUnityContainer _container;

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

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

我需要使用 Unity 解析 IMyInterface,因为需要拦截逻辑。 把Container注入一个工厂不好吗?

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

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

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

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

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

所以,你们工厂没有容器。当你注入你的工厂时,统一容器将生成 Func 来解析你的 class.

更多信息here在自动工厂部分。