工厂里用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在自动工厂部分。
有代码:
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在自动工厂部分。