我一直在閱讀關於控制反轉的框架,我只是在玩弄這個問題:「爲什麼在地獄中我需要一個框架來做到這一點?爲什麼要使用IoC框架
不要誤解我的問題......模式是我們程序員經常使用的東西,但是......一個全功能的框架來做到這一點?
我必須錯過一些東西,這就是我發佈這個問題的原因。我在網上看到了很多例子,我只是不明白。也許,我的思想被阻止了。
只要看看在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 theWarrior = new Samurai(new Sword());//still no coupling
:
Samurai theWarrior = new Samurai(WarriorModule.GetInstance(IWeapon));//no coupling
可能被替換
或
Samurai theWarrior = new Samurai(GetWeaponFromXML());//no coupling yet
什麼是部分我失蹤?你能否介紹一下我的應用程序需要Ioc框架的情況?
謝謝。
4個答案後的更新:我真的很喜歡我從你們那裏得到的所有答案。我剛剛閱讀了這篇文章dependency-injection-dissection/,其中這個人使用它來進行單元測試和剛纔提供的StackOverflow鏈接,是的,我錯過了大 - 大 - 複雜的部分,所以讓我自定義使用IoC框架。再次感謝。
我會投你的答案,但我只是得到一個橙色的消息,說我不能。
感謝那些突出顯示我發佈的代碼的人。
我建議修改你的問題,使代碼塊實際的代碼塊,方法是'亮並按CTRL-K '或者在每行代碼的前面插入四個空格。 – jcolebrand 2010-09-28 18:50:35
'新武士(新劍()); //仍然沒有耦合'這裏有一個緊密的耦合,你使用'new'。當你重構它時,你必須改變實例化劍的每個地方。 – nos 2010-09-28 18:54:03
[爲什麼需要IoC容器而不是簡單的DI代碼?](http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed -to-straightforward-di-code) – 2010-09-29 12:10:46