我刚刚开始学习依赖注入(DI)及其在C#中的类型。我注意到在几乎所有文章中,前面提到的两种类型的注入机制是相同的,即构造函数注入和属性/ Setter注入。
但是第三篇文章在许多文章中都有所不同 - 有些作者提到“基于接口的注入”作为第三种机制,有些人提到了“方法注入”。我对同样的理解可能是错的,它们可能是同一个东西,但仅仅为了我的澄清,想知道它们之间是否有任何具体的差异?
提前致谢。
http://www.c-sharpcorner.com/UploadFile/ff2f08/dependency-injection-pattern/
答案 0 :(得分:5)
有三种基本的DI模式描述 如何注入依赖关系:
Martin Fowler然而另外定义了Interface Injection。这可能看起来像DI的另一种形式,但它实际上只是 Property Injection 或 Method Injection 的一种形式,其中属性或方法是类的一部分<强>抽象即可。据我所知,接口注入不是常用的术语。
Dependency Injection Principles, Practices, and Patterns描述了注入方法始终应放在抽象上。当这种注入方法仅在实现时实现时,它意味着只有组合根可以访问它们,但书中说明:
另一方面,方法注入不适合 组合根中使用。在合成根中,方法注入可用于初始化以前构建的依赖关系类。但这样做会导致时间耦合,因此非常不鼓励(§4.3.2)。
属性注入通常仅用于实现,而不是抽象。这是因为在属性注入的情况下, 组合根将设置该依赖关系。
正如Fowler所描述的那样,接口注入似乎主要用于初始化组件,但如上所述,这会导致 Temporal Couping 强>因此应该被阻止。使用构造函数注入或使用方法注入而不存储依赖项。
为了更好地理解DI,您应该阅读该书的免费chapter 1。