Spring for Delphi中GlobalContainer和ServiceLocator有什么区别?

Raf*_*olo 5 delphi spring4d

他们看起来很相似.我可以在GlobalContainer中注册一些东西:

GlobalContainer.RegisterType<TMyImplementation>.Implements<IMyInterface>;
Run Code Online (Sandbox Code Playgroud)

并通过GlobalContainer或获取实例ServiceLocator,它们都工作:

MyInstance := GlobalContainer.Resolve<IMyInterface>;
MyInstance := ServiceLocator.GetService<IMyInterface>;
Run Code Online (Sandbox Code Playgroud)

Ste*_*nke 6

ServiceLocator是在需要的时候在你的代码解析相关性.在那里你不想使用对容器的引用,因为这完全违背了丢失耦合代码的目的.

就个人而言,我同意那些说服务定位器本身就是反模式的人,应尽可能通过注入可能的一切来避免.