Singleton Vs ServiceLocator

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

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

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

引用SomeSingletonIProvider深埋在某处。

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

如果可测试性是一个问题,那么使用服务定位器要比纯粹的单例更好。