Omu*_*Omu 9 c# castle-windsor ioc-container inversion-of-control winforms
在asp.net-mvc中,我有Windsor Controller Factory,它将所有依赖项注入到控制器中,但是如何在Windows窗体中获得它?
例如,如果有这个Form1,我将如何获得Form1的实例,我应该使用resolve(由某个ppl称为ServiceLocator和反模式)?
public class Form1
{
private IBarService _barService;
public Form1(IBarService barService)
{
_barService = barService;
}
}
Run Code Online (Sandbox Code Playgroud)
对表单(或其他UI框架中的其他视图)使用构造函数注入通常是有问题的,因为Visual Studio设计器期望并假设默认构造函数.
在任何情况下,Form或其他视觉控件都应该是一个没有行为的愚蠢视图.它的目的是显示绑定到它的任何数据.使用数据绑定功能通常有助于将您限制为这种被动的显示形式.
这意味着您需要某种Controller,它可以实例化View(Form)并将数据源绑定到它.
使用WPF等技术更容易实现,但Windows Forms也可以实现.有关如何使用Windows窗体执行此操作的灵感,我建议您查看(现已退役)复合应用程序块 - 它过于复杂,但它应该为您提供有关如何自己实现类似内容的一些想法.