他们看起来是如此相似。我可以在GlobalContainer中注册一些东西:
GlobalContainer.RegisterType<TMyImplementation>.Implements<IMyInterface>;
并通过
GlobalContainer
或ServiceLocator
获取实例,它们都可以工作:MyInstance := GlobalContainer.Resolve<IMyInterface>;
MyInstance := ServiceLocator.GetService<IMyInterface>;
最佳答案
ServiceLocator
用于在需要时解析代码中的依赖项。在那里,您不想使用对容器的引用,因为这样做完全违背了丢失代码的目的。
我个人同意那些说服务定位器本身是一种反模式的人的看法,应尽可能注入(inject)所有可能的东西来避免这种情况。