【发布时间】:2011-11-14 12:30:48
【问题描述】:
阅读许多关于这 3 个习语之间区别的帖子。但是比较困惑,然后我遇到了这篇文章: http://martinfowler.com/articles/injection.html
只是想看看我是否做对了。如果我错了,请纠正我。 请通知我更正和补充:
IoC- 是将应用程序与其使用的服务实现分离的概念。该应用程序包含对 Iservice 的引用,并且不负责实例化具体服务。
至少有两种方法可以实现:
DI - 具体服务作为 ctor 参数注入/抛出 setter/throw 接口注入(后者是什么意思?)
ServiceLocator - 是一个知道应用程序可能需要的所有具体服务的组件。应用程序明确要求定位器提供具体服务。
*IoC 容器实际上是控件的工厂(“提供者”)。
我对文章中的“何时更喜欢 (1) 或 (2)”部分感到有些困惑。 有人可以用外行的话从他自己的经历中说出来吗?
“服务定位器由于其更直接的行为而略有优势。但是,如果您正在构建要在多个应用程序中使用的类,那么依赖注入是更好的选择。”--> 定位器如何更直接?因为它显式地使用方法调用?有多个应用程序时使用 DI 有什么好处?
【问题讨论】:
-
也许您可以突出文章中让您感到困惑的特定想法?
-
"服务定位器由于其更直接的行为而略有优势。但是,如果您正在构建要在多个应用程序中使用的类,那么依赖注入是一个更好的选择。"--> 定位器如何更多直截了当?因为它显式地使用方法调用?有多个应用程序时使用 DI 有什么好处?
标签: dependency-injection inversion-of-control ioc-container service-locator