与单例相比,使用服务定位器的优缺点是什么?我读过单例很糟糕,但我想知道 s Service Locator 是否通常是一种更好的做事方式。
最佳答案
这两种方法都很糟糕,因为从类契约(Contract)中看不出它的依赖项是什么。那是,
private void foo()
{
var x = SomeSingleton.Instance.GetX();
var y = ServiceLocator.GetService<IProvider>().GetY();
}
对
SomeSingleton
和 IProvider
的引用深埋在内部某处。然而,与纯单例方法相比,服务定位器通常要好得多,因为它们允许更简单的集中配置、生命周期管理等。它们还允许更好的可测试性(你总是可以模拟对
GetService<T>
的调用)、更低的耦合、关注点分离, 等等。关于c# - Singleton与ServiceLocator,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1328263/