Singleton与ServiceLocator

djc*_*uch 6 c# singleton service-locator

使用服务定位器与单身人士相比有哪些优缺点?我已经读到单身人士很糟糕,但我想知道服务定位器是否通常是更好的做事方式.

Ant*_*lev 10

这两种方法都很糟糕,因为从类合同来看,它的"依赖性"是不是很明显.那是,

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

引用SomeSingletonIProvider深埋在某处.

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

  • 我甚至会考虑两种反模式,但我同意Service Locator略微优先考虑.最好的解决方案是实现适当的依赖注入. (2认同)