与单例相比,使用服务定位器的优点和缺点是什么?我读过单身人士很糟糕,但我想知道服务定位器是否通常是一种更好的做事方式。
问问题
5338 次
2 回答
12
这两种方法都不好,因为从类契约中看不出它的依赖关系是什么。那是,
private void foo()
{
var x = SomeSingleton.Instance.GetX();
var y = ServiceLocator.GetService<IProvider>().GetY();
}
有参考SomeSingleton
并IProvider
深埋在里面的某个地方。
然而,与纯单例方法相比,服务定位器通常要好得多,因为它们允许更简单的集中配置、生命周期管理等。它们还允许更好的可测试性(你总是可以模拟对 的调用GetService<T>
)、更低的耦合、关注点分离、等等
于 2009-08-25T13:32:07.990 回答
1
如果可测试性是一个问题,使用服务定位器比纯单例要好得多。
于 2013-06-06T10:28:10.520 回答