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

时间:2013-02-07 02:51:49

标签: delphi spring4d

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

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

通过GlobalContainerServiceLocator获取实例,两者都有效:

MyInstance := GlobalContainer.Resolve<IMyInterface>;
MyInstance := ServiceLocator.GetService<IMyInterface>;

1 个答案:

答案 0 :(得分:6)

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

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