Abh*_*uha 0 c# dependency-injection interface-injection
我刚刚开始学习依赖注入(DI)及其在C#中的类型.我注意到在几乎所有文章中,前面提到的两种类型的注入机制都是相同的,即构造函数注入和Property/Setter注入.
但是第三个在许多文章中都有所不同 - 一些作者提到" 基于接口的注入 "作为第三种机制,有些人提到了" 方法注入 ".我对同样的理解可能是错的,它们可能是同一个东西,但仅仅为了我的澄清,想知道它们之间是否有任何具体的差异?
提前致谢.
参考文献:http://www.dotnettricks.com/learn/dependencyinjection/implementation-of-dependency-injection-pattern-in-csharp
http://www.c-sharpcorner.com/UploadFile/ff2f08/dependency-injection-pattern/
有三种基本的DI模式描述了如何注入依赖关系:
然而,Martin Fowler也定义了接口注入.这可能看起来像DI的另一种形式,但它实际上只是Property Injection或Method Injection的一种形式,其中属性或方法是类的Abstraction的一部分.接口注入是我所知不常用的术语.
依赖注入原则,实践和模式描述了注入方法应始终放在抽象上.当这种注入方法仅在实现时实现时,它意味着只有组合根可以访问它们,但书中指出:
方法注入不适合使用中的成分根.在组合根中,方法注入可用于使用其依赖项初始化先前构造的类.然而,这样做会导致时间耦合,因此非常不鼓励(第4.3.2节).
另一方面,属性注入通常仅用于实现而不是抽象.这是因为在的情况下,物业注入这是该成分根,将设置这种依赖性.
正如Fowler所描述的那样,接口注入似乎主要用于初始化组件,但如上所述,这导致时间耦合,因此应该被阻止.使用构造函数注入或使用方法注入而不存储依赖项.
为了更好地理解DI,您应该阅读该书免费提供的第1章.
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |