2011-04-06 58 views
1

我在WinForms中編寫應用程序,並想知道是否使用IoC或Container。服務容器或IoC for WinForms建議

我們正在編寫是一個文本編輯器爲我們的本土BASIC語言風格來計算費用等,其像記事本+ +,但沒有那麼多的功能和調試器。

我不知道我是否應該使用一個容器或一個IoC和我應該選擇。作爲一個WinForms應用程序,在啓動時需要做很多事情(加載語法引擎,UI配置等),你認爲我甚至可以使用IoC嗎?

與容器,我可以做一個靜態類只是Container.GetInstance(),但我看不出何以線了一個IoC當一些類將依賴於他人等

我也有很多我想要使用COmmand Pattern的命令,所以定義一個ICommand並用ITextCommand,IFormulaCalculationCommand,IDebugCommand來擴展特定的區域。我甚至會如何使用IoC來從其中一個命令中獲取Tab中的活動文檔?

現在我對此很感到困惑,我很抱歉。

這裏有幾個簡短的問題,如果你不能回答以上乾淨:)

  • 什麼是最快和最簡單的容器(的ServiceContainer?)
  • 你會推薦一個IoC像Autofac此Windows窗體項目?
  • 你可以實現IoC並仍然使用命令模式來調用命令並獲取正在編輯的活動文檔等嗎?
+0

通過服務容器,你或許意味着服務定位? – driushkin 2011-04-06 12:55:34

回答

2

首先,「IOC」是指「inversion of control」,這是一個概念(沒有具體的軟件組件)是高度相關的dependency injection。所述容器(其軟件組件)是依賴注入容器。所以不僅「IoC」和「容器」兩個實體是無法比較的,它們也在同一個「陣營」內部可以這麼說。

因此問題可以更好地表述爲「我應該使用DI容器我的應用程序?」。

有幾種DI容器,你可以選擇:微軟團結,溫莎城堡和NInject是一些比較知名的人的(我不知道Autofac直到現在)。挑一個,然後繼續;在你的情況下沒有實際的區別,並且如果需要的話你總是可以相對容易地轉換到另一個。

此外,容器的一個主要賣點是你不需要來連接它們來構建具有深度依賴樹的類。容器自動解析並注入依賴關係;如果您需要將對象構造與傳遞給構造函數的特定值進行匹配,則只需要提供幫助。

最後,還有一個DI容器和命令圖案或類似的東西之間沒有關係。如果您想獲取活動文檔,那麼只需在活動文檔發生更改時將其存儲在變量中,並在需要時讀取該變量。容器根本不會進入。

更新:將鏈接添加到高度相關的問題Which .NET Dependency Injection frameworks are worth looking into?

+0

感謝您的回答,是否有使用DI技術編寫的文本編輯器的一個很好的示例,這很簡單?我看着SharpDevelop,但它太複雜,不能分開。 – 2011-04-06 12:57:11

+0

@SophieCrystalTaylor:我認爲在任何地方使用DI都不會有*文本編輯器的好例子。理解DI的人不需要這樣一個例子,而那些沒有更好介紹例子的人則更好。不需要對其進行文本編輯。決定一個容器並閱讀它的教程。 – Jon 2011-04-06 13:00:06