我有Windsor Controller Factory,它将所有依赖项注入到控制器中,但是你如何在Windows Forms中获得它?
例如,如果有这个Form1,我将如何获得Form1的实例,我应该使用resolve(由某个ppl称为ServiceLocator和反模式)?
public class Form1
{
private IBarService _barService;
public Form1(IBarService barService)
{
_barService = barService;
}
}
答案 0 :(得分:7)
对表单(或其他UI框架中的其他视图)使用构造函数注入通常是有问题的,因为Visual Studio设计器期望并假设默认构造函数。
在任何情况下,Form或其他视觉控件都应该是一个没有行为的愚蠢视图。它的目的是显示绑定到它的任何数据。使用数据绑定功能通常有助于限制您进入这种被动的显示形式。
这意味着你需要某种 Controller ,它可以实例化View(Form)并将数据源绑定到它。
使用WPF等技术更容易,但Windows Forms也可以。关于如何使用Windows窗体执行此操作的灵感,我建议您查看(现已退役)Composite Application Block - 它过于复杂,但它应该会给您一些关于如何自己实现类似的东西。
答案 1 :(得分:5)
是的,在program.cs中你应该让windsor解决Form1
。为了能够在设计器中查看表单,您需要添加一个空构造函数并使用Obsolete
属性进行修饰。