2008-10-30 89 views
6

我很少聽到有人在.Net中使用Inversion of Control (Ioc)原理。我有一些與Java一起工作的朋友,他們在Spring和PicoContainer中使用了更多的Ioc。控制反轉.net

我理解從代碼中刪除依賴關係的原理......但我懷疑它好多了。

爲什麼.Net程序員不使用(或使用更少)這些類型的框架?如果你這樣做,你是否真的從長遠的角度看到了積極的影響?

+0

只是谷歌「Alt.net」 - 你會發現很多人在.net中使用IOC。微軟甚至有他們自己的IOC框架,比如Unity。 – 2008-10-30 15:09:52

回答

6

許多人在.NET中使用IOC,並且有幾個框架可用於協助使用IoC。你可能在WinForms方面看不到它,因爲當你在Visual Studio中設計表單時,讓容器連接所有的東西比較困難,但我可以說,對於服務器端的.NET應用程序,至少在我的工作環境中,IoC被非常成功地使用。

爲什麼在.NET中使用它?出於同樣的原因,你在其他地方使用它。我喜歡的兩件最重要的事情是:

  • IoC的設計傾向於強化良好的編碼實踐 - 設計接口,低耦合,高內聚。這也導致了非常容易進行單元測試的類。
  • 系統配置通常可以在不重新編譯的情況下進行更改。

一些其他職位討論可用不同的IoC/DI框架.NET:

4

我用StructureMap依賴注入和最近纔開始使用它與iBATIS.NET在運行時注入我們的域對象映射器(和而不是 t通過一個XML配置文件,不用了,謝謝!)。

我已經看到直接的好處。爲我們所有的映射器(例如IPersonMapper)創建接口,然後添加Moq,使我可以快速輕鬆地編寫一些非常棒的無數據庫單元測試。

此前(.NET 1.0)我寫了自己的插件系統,主要是爲了瞭解反射。從那時起,我在我的項目中實施了某種IoC。它最近纔開始使用IoC進行單元測試,所以寫起來不那麼痛苦。在這一點上,我無法想象以任何其他方式進行。

2

直到現在,IoC在.Net中並不常見。它與微軟有關,並且有推廣活動。直到現在,他們更加強調VS的RAD功能,同時忘了推廣IoC和Di之類的東西,但是現在他們有了自己的框架Unity以及他們在ASP.Net MVC上所做的工作。

所以我想大多數人會開始使用這樣的事情。因爲知道他們有一個MS替代使用。

而且我使用StructureMap。

1

它越來越普遍。我目前的項目使用Spring,在我之前的項目中,我們使用了Castle Windsor。

現在我想使用'約定配置'的想法,以防止所有這些複雜的XML聲明。

1

有很多與使用IoC .NET有關的理論。我認爲有相當數量的開發人員沒有這方面的經驗。他們不是來自Java背景。他們來自傳統的ASP和VB6背景。此外,微軟直到最近才真正推動使用IoC。

此外,使用IoC假定有幾件事。首先,你必須瞭解它的用途以及你從中得到什麼。其次,你必須開發你的代碼,以便實際使用IoC容器。

IoC不僅僅是使用工具箱中的其他項目。這是關於如何使用,知道何時使用它以及如何成爲開發人員。

因爲它涉及.NET,我有幾個IoC容器。我使用過Windsor,StructureMap,Unity以及最近的Ninject。請記住,雖然我並沒有在實際應用中使用它們。我喜歡玩耍,看看那裏發生了什麼。我發現IoC容器.NET的市場非常好。

0

我使用它來允許我的單元測試替代上游相關對象的模擬類(模擬實際生產類),以便我的單元測試真正只執行和測試它們寫入測試的一個類中的代碼。

0

嘗試LinFu.IOC 2.0:

http://www.codeproject.com/KB/cs/LinFu_IOC.aspx

這是最靈活的IOC容器的一個在那裏,像Ninject,有沒有XML文件來維護。然而,與Ninject不同的是,LinFu並不強迫你編寫任何綁定代碼來將你的依賴連接在一起。看一看! :)