可能重复:
Is it better to create a singleton to access unity container or pass it through the application?IoC容器 - 单例还是绕过实例?
我介绍IoC容器到系统中。自然的问题是,它应该是一个单例还是一个传递给一个类的实例?我倾向于把它作为一个单例实例,因为:
- 不需要像构造函数那样混乱类定义,附加属性。
- 更清晰 - 每个应用程序一个实例,一个初始化路由。
- 如果需要,可以使用覆盖进行默认映射(如单元测试)。
下面是它的外观:
class Main
{
public static void main(params string[] args)
{
IoCContaner.Intance.Add<IBar>();
IoCContaner.Intance.Add<IBaz>();
IoCContaner.Intance.Add<IQux>();
var foo = new Foo();
Foo.DoBarStuff();
}
}
class Bar : IBar
{
public Bar(IBaz, IQuz) {}
public void DoBazStuff() { _baz.DoStuff(); }
}
class Foo
{
public void DoBarStuff()
{
var bar = IoCContaner.Intance.Resolve<IBar>();
bar.DoBazStuff();
}
}
有什么我失踪,而不是我实际上应该有类似:
class Foo
{
IoCContainer _c;
public Foo(IoCContainer c) { _c = c; }
...
private void DoBarStuff()
{
var bar = _c.Resolve<IBar>();
bar.DoBazStuff();
}
}
当然用第二种方法我可以一直通过传递一个单例容器实例来回退到第一个。
编辑:更新的代码示例
Duplicate:http://stackoverflow.com/questions/2386487/is-it-better-to-create-a-singleton-to-access-unity-container-or-pass-it-through-t –
Voted我自己关闭作为dup。除了唯一的答案是将IoC用法注意力分散到DI,这不是我正在问的问题。请投票结束。 – Schultz9999