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

在asp.net-mvc中,我有Windsor Controller Factory,它将所有依赖项注入到控制器中,但是如何在Windows窗体中获得它?

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

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

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

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

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

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

使用WPF等技术要容易得多,但Windows Forms也可以。 有关如何使用Windows窗体执行此操作的灵感 ,我建议您查看(现已退役) 复合应用程序块 – 它过于复杂,但它应该为您提供有关如何自己实现类似内容的一些想法。