<分区>
Possible Duplicate:
Is it better to create a singleton to access unity container or pass it through the application?
我正在将 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();
}
}
当然,对于第二种方法,我可能总是通过传递一个单例容器实例来回退到第一种方法。
已编辑:更新的代码示例