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