1

我想在我的 WinForms 应用程序中使用 Ninject。我不知道如何将它用于我的用户控件。有时他们依赖于我想通过 DI 框架配置的服务。这些控件需要通过设计器进行管理(因此需要默认构造函数)。

那么,有没有办法将依赖项注入到这个用户控件的属性中呢?由于设计师需要能够构建它,kernel.Get<TestClass>因此不会在这里工作。是否有一种方法或一些代码可以让我“填充”Form_OnLoad()方法中的依赖关系?

我还可以想到其他示例,在这些示例中我想注入到已经存在的对象的属性中,但是 WinForms 用户控件是最容易解释的。

4

2 回答 2

2

我认为你需要颠倒你的想法。在Model View Controller中,View 只有一个职责:显示数据。

数据如何到达那里是 Controller 的责任,而数据在内存中的表示方式由 Model 决定。

尽管没有针对 Windows 窗体的特定 MVC 框架,但可以手动制作粗略的框架,或者您可以查看(现已退役的)复合应用程序块以了解如何完成此操作(尽管 CAB 是也许对大多数人的口味来说太复杂了)。今天有更优雅的选项可用,但它们涉及 WPF。

在任何情况下,不要将您的依赖项注入到您的视图中,而是将它们注入到控制器中,并让控制器实例化并正确填充视图(您的控件)。

通过这种方式,您可以使您的控件不受 DI 问题的影响,因为它们应该是。

于 2010-01-24T20:50:48.813 回答
1

我认为问题是您可以使用什么 DI 工具来获得依赖注入以与 Windows 窗体一起使用。每个人都做 MVC 示例,因为它很容易实现(如果在我们周围浮动,相同的示例就好像它是新的和原始的)。如果您有使用 winforms 甚至 WPF 的答案 - 这将很有帮助。

这里的答案基本上是说-无论如何,我不知道将它们注入控制器并填充视图-真的吗?回到 MVC?再次 - winforms。

于 2011-05-26T04:42:21.090 回答