有代码:
class MyFactory : IMyFactory
{
private IUnityContainer _container;
public MyFactory(IUnityContainer container)
{
_container = container;
}
public IMyInterface Create()
{
_container.Resolve<IMyInterface>();
}
}
我需要使用Unity解析IMyInterface,因为需要拦截逻辑。 将Container注入工厂是不是很糟糕?
答案 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。