如何在Windows窗体中的构造函数中注入依赖项

时间:2010-02-05 19:50:19

标签: c# winforms inversion-of-control castle-windsor ioc-container

在asp.net-mvc中的

我有Windsor Controller Factory,它将所有依赖项注入到控制器中,但是你如何在Windows Forms中获得它?

例如,如果有这个Form1,我将如何获得Form1的实例,我应该使用resolve(由某个ppl称为ServiceLocator和反模式)?

public class Form1
{
   private IBarService _barService;

   public Form1(IBarService barService)
   {
       _barService = barService;
   }
}

2 个答案:

答案 0 :(得分:7)

对表单(或其他UI框架中的其他视图)使用构造函数注入通常是有问题的,因为Visual Studio设计器期望并假设默认构造函数。

在任何情况下,Form或其他视觉控件都应该是一个没有行为的愚蠢视图。它的目的是显示绑定到它的任何数据。使用数据绑定功能通常有助于限制您进入这种被动的显示形式。

这意味着你需要某种 Controller ,它可以实例化View(Form)并将数据源绑定到它。

使用WPF等技术更容易,但Windows Forms也可以。关于如何使用Windows窗体执行此操作的灵感,我建议您查看(现已退役)Composite Application Block - 它过于复杂,但它应该会给您一些关于如何自己实现类似的东西。

答案 1 :(得分:5)

是的,在program.cs中你应该让windsor解决Form1。为了能够在设计器中查看表单,您需要添加一个空构造函数并使用Obsolete属性进行修饰。