他们看起来是如此相似。我可以在GlobalContainer中注册一些东西:

GlobalContainer.RegisterType<TMyImplementation>.Implements<IMyInterface>;

并通过GlobalContainerServiceLocator获取实例,它们都可以工作:
MyInstance := GlobalContainer.Resolve<IMyInterface>;
MyInstance := ServiceLocator.GetService<IMyInterface>;

最佳答案

ServiceLocator用于在需要时解析代码中的依赖项。在那里,您不想使用对容器的引用,因为这样做完全违背了丢失代码的目的。

我个人同意那些说服务定位器本身是一种反模式的人的看法,应尽可能注入(inject)所有可能的东西来避免这种情况。

10-05 22:15