【发布时间】:2011-10-29 06:56:18
【问题描述】:
从Dependency Injection in .NET 一书中,我知道应该在应用程序的Composition Root 创建对象图,当您使用IoC Container 时,这对我来说很有意义。
在我尝试使用 DI 时看到的所有应用程序中,总是有两个构造函数:
- 以依赖项为参数和
- “默认”一个没有参数,反过来又调用另一个“更新”所有依赖项
然而,在前面提到的书中,这被称为“Bastard Injection 反模式”,这就是我以前所知的“Poor Man's Injection”。
现在考虑到这一切,我会说“穷人的注射”只是不使用IoC Container,而是在上述Composition Root上手动编码所有对象图。
所以我的问题是:
- 我是正确理解这些概念还是完全偏离了轨道?
- 如果您仍然需要在 IoC 容器中注册所有依赖项,而不是在完全相同的 Composition Root 中手动编码,那么使用 IoC 容器的真正好处是什么?
- 如果我误解了“穷人的注射剂”到底是什么,有人可以澄清一下吗?
【问题讨论】:
-
听起来像是术语的不同。这两个术语听起来像是书作者试图引起轰动的同义词。
-
我真的不认为作者像你这样称呼他是耸人听闻的,他确实提出了一个令人信服的论点,如果在空构造函数中创建的默认实例是在单独的程序集中定义的,那么你刚刚将这两个依赖项耦合得非常紧密。有了这个论点,除非默认值属于同一个程序集,否则我完全可以理解为什么“Bastard Injection”会是一种反模式。
-
关于混蛋注射,另见:stackoverflow.com/questions/6733667/…
标签: oop dependency-injection architecture