【发布时间】:2011-04-18 11:27:34
【问题描述】:
我一直在阅读有关控制反转框架的内容,但我只是在玩弄这个问题:“我到底为什么需要一个框架来做到这一点?”
不要误解我的问题...这种模式是我们程序员经常使用的,但是...一个功能齐全的框架可以做到这一点?
我一定遗漏了一些东西,这就是我发布问题的原因。我在网上看到了很多例子,我就是不明白。可能我脑子里被这个想法挡住了。
看一下 Ninject 主页的示例:
public class Samurai {
public IWeapon Weapon { get; private set; }
public Samurai(IWeapon weapon) {
Weapon = weapon;
}
}
public class WarriorModule : NinjectModule {
public override void Load() {
Bind< IWeapon >.To< Sword >();
}
}
“武士”课程对我来说没问题。 “NinjectModule”框架对我来说似乎没有必要。
我假设稍后在代码中我们将创建新的“Samurai”实例,将“Sword”实例传递给它,类似于:
Samurai theWarrior = new Samurai(WarriorModule.GetInstance(IWeapon));//no coupling
可以替换为:
Samurai theWarrior = new Samurai(new Sword());//still no coupling
或
Samurai theWarrior = new Samurai(GetWeaponFromXML());//no coupling yet
我缺少什么?您能否介绍一下我的应用程序中可能需要 Ioc 框架的一些场景?
谢谢。
4 个答案后更新:我真的很喜欢从你们那里得到的所有答案。我刚刚阅读了这篇 dependency-injection-dissection/ 的帖子,那个家伙将它用于单元测试和您刚刚提供的 StackOverflow 链接,是的,我错过了大复杂性部分,所以让我自己自定义使用 IoC 框架。再次感谢。
我会投票给你的答案,但我只是收到一条橙色消息,说我不能。
感谢突出显示我发布的代码的人。
【问题讨论】:
-
我建议通过
highlighting and pressing ctrl-k或在每行代码前插入四个空格来编辑您的问题以使代码块成为实际的代码块。 -
new Samurai(new Sword());//still no coupling这里有一个紧耦合,你使用new。当你重构它时,你必须改变每个实例化剑的地方。
标签: ioc-container ninject