Singleton与ServiceLocator

时间:2009-08-25 13:25:53

标签: c# singleton service-locator

使用服务定位器与单身人士相比有哪些优缺点?我已经读到单身人士很糟糕,但我想知道服务定位器是否通常是一种更好的做事方式。

2 个答案:

答案 0 :(得分:10)

这两种方法都很糟糕,因为从类合同来看,它的“依赖性”是不是很明显。也就是说,

private void foo()
{
    var x = SomeSingleton.Instance.GetX();
    var y = ServiceLocator.GetService<IProvider>().GetY();
}

引用了SomeSingletonIProvider深埋在某处。

然而,与纯单例方法相比,服务定位器通常要好得多,因为它们允许更简单的集中配置,生命周期管理等。它们还允许更好的可测试性(您始终可以模拟对GetService<T>的调用) ,较低的耦合,关注点分离等。

答案 1 :(得分:0)

如果可测性是一个问题,使用服务定位器要比纯单子好得多。