2010-01-24 87 views
1

我想在我的WinForms應用程序中使用Ninject。我無法弄清楚如何將它用於我的用戶控件。有時候他們依靠我想通過DI框架配置的服務。這些控件需要通過設計器進行管理(因此需要默認構造函數)。使用Ninject將依賴項注入外部構造的對象(用戶控件)

那麼,有沒有辦法將依賴關係注入到此用戶控件的屬性中?由於設計人員需要能夠構造它,因此kernel.Get<TestClass>在這裏不起作用。有沒有一種方法或一些代碼可以讓我「填充」Form_OnLoad()方法中的依賴關係?

我也可以想到其他例子,我想注入已經存在的對象的屬性,但是WinForms用戶控件是最容易解釋的。

回答

2

我認爲你需要反思你的想法。在Model View Controller中,視圖只有一項責任:顯示數據。

數據如何到達控制器的責任,以及數據在內存中的表示方式由模型決定。

雖然沒有針對Windows Forms的特定MVC框架,但可以手動製作粗糙的框架,或者您可以查看(現已退役)Composite Application Block以瞭解如何完成此操作(儘管CAB對於大多數人的口味來說可能過於複雜)。今天有更多優雅的選項,但它們涉及WPF。

在任何情況下,而不是注入到您的視圖的依賴關係,注入到控制器,並讓控制器實例化並正確填充視圖(您的控件)。

以這種方式,您可以保持您的控件不受DI關注,因爲它們應該是。

+0

好吧,我看到控制器應該最終有依賴關係。我一直在做MVC,先創建View,然後創建Controller。由於用戶控件總是要由表單或其他控件創建,所以應該沿着單獨的路徑創建控制器? – Nathan 2010-01-25 03:08:59

+0

當我的myControl屬性使用[Inject]屬性時,我錯誤地使用kernel.Inject(myControl)? – Nathan 2010-01-25 03:14:47

+0

只要您意識到這意味着需要依賴Ninject本身,您就可以做到這一點。使用'kernel.Inject(myControl)'的 – 2010-01-25 05:23:22

1

我認爲這個問題是什麼DI工具可以用來獲得依賴注入與Windows窗體的工作。每個人都會使用MVC示例,因爲它很容易實現(如果在我們周圍浮動,就好像它是新的和原始的一樣)。如果你有使用WinForms甚至WPF的答案 - 這將是有益的。

這個答案在這裏基本上說 - 在任何情況下,我不知道如此注入控制器和填充意見 - 真的嗎?回到MVC?再次 - winforms。

+0

不太理解你的第二段。你是否在說,迴應的人不應該建議改用MVC作爲解決方案?就我個人而言,我使用ASP.NET WinForms,並沒有將大型應用程序重寫爲MVC的計劃。 – 2016-03-22 17:01:46