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

最佳答案

这两种方法都很糟糕,因为从类契约(Contract)中看不出它的依赖项是什么。那是,

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

SomeSingletonIProvider 的引用深埋在内部某处。

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

关于c# - Singleton与ServiceLocator,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1328263/

10-09 14:51