7

与单例相比,使用服务定位器的优点和缺点是什么?我读过单身人士很糟糕,但我想知道服务定位器是否通常是一种更好的做事方式。

4

2 回答 2

12

这两种方法都不好,因为从类契约中看不出它的依赖关系是什么。那是,

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

有参考SomeSingletonIProvider深埋在里面的某个地方。

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

于 2009-08-25T13:32:07.990 回答
1

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

于 2013-06-06T10:28:10.520 回答