使用服务定位器与单身人士相比有哪些优缺点?我已经读到单身人士很糟糕,但我想知道服务定位器是否通常是一种更好的做事方式。
答案 0 :(得分:10)
这两种方法都很糟糕,因为从类合同来看,它的“依赖性”是不是很明显。也就是说,
private void foo()
{
var x = SomeSingleton.Instance.GetX();
var y = ServiceLocator.GetService<IProvider>().GetY();
}
引用了SomeSingleton
和IProvider
深埋在某处。
然而,与纯单例方法相比,服务定位器通常要好得多,因为它们允许更简单的集中配置,生命周期管理等。它们还允许更好的可测试性(您始终可以模拟对GetService<T>
的调用) ,较低的耦合,关注点分离等。
答案 1 :(得分:0)
如果可测性是一个问题,使用服务定位器要比纯单子好得多。