好与坏的Unity设计:注入完整的容器或仅显式接口
本文关键字:接口 Unity 设计 注入 | 更新日期: 2023-09-27 18:14:16
这是个好与坏的设计问题。
我发现在我的模块中总是注入完整的Unity容器非常方便。
1)。你永远不知道你会需要什么资源。2.) 如果您需要更多的容器资源,则永远不需要更改类的构造函数。
看起来像这样:
public class ServiceLocator: IServiceLocator
{
private IUnityContainer _container = null;
public ServiceLocator(IUnityContainer container)
{
_container = container;
}
public void DoSomething()
{
var x = this._container.Resolve<IXInterface>();
var y = this._container.Resolve<IYInterface>();
x.Do();
y.Do();
}
}
在教程和unity示例中,我经常看到,你只应该注入你真正需要的资源。它看起来像这样:
public class ServiceLocator: IServiceLocator
{
private XInterface _x = null;
private YInterface _y = null;
public ServiceLocator(Ixnterface x, IYnterface y)
{
_x = x;
_y = y;
}
public void DoSomething()
{
_x.Do();
_y.Do();
}
}
我的问题是:
你认为什么是更好的设计?
为什么你只注入显式接口,当Unity容器中有所有的资源?
未来的问题是什么?
唯一的问题,我看到的未来是,你总是必须有一个统一的容器在未来,如果你没有它,你必须重写模块。
你觉得怎么样?
EDIT:我找到的一些最好的答案是,第一个版本不是依赖注入,它是某种"服务定位器模式",这可能会导致许多问题。
可以在这里找到:
http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/在第一种方法中,您已经获得了对所需接口的依赖,而且您还向容器中添加了另一个接口:
var x = this._container.Resolve<IXInterface>();
var y = this._container.Resolve<IYInterface>();
因此,您违背了使用DI的主要原因之一。