具有依赖项注入的 UserControl 无法创建组件
UserControl with dependency injection Failed to create component
我有 winform 应用程序 我正在尝试将 UserControl 添加到我的表单,但出现此错误
这是我的用户控件
private readonly UserService userService;
private readonly UserValidator userValidator;
public UCUsers(UserService userService,UserValidator userValidator)
{
InitializeComponent();
this.userService = userService;
this.userValidator = userValidator;
}
但是当我在不使用依赖注入的情况下创建构造器时,它工作正常。
如何使用依赖注入的 UserControl。
设计器需要为您的控件生成代码;如果你在构造函数中有依赖,那么设计者如何生成一行代码来实例化你的控件呢?它应该传递给构造函数什么参数?
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
...
this.uCUsers1 = new UCUsers (??????, ??????);
...
您需要为 UserControl 创建一个无参数的构造函数,并为这些类型的依赖项定义一些属性。然后在 design-time 您可以使用您的控件,并且在 run-time 您可以设置这些依赖项,通过表单的构造函数解析它们(或直接通过服务容器解析)。
例如,您的用户控件应该是这样的:
public class MyUserControl: UserControl
{
public MyUserControl()
{
//...
}
public IHelloService HelloServiceInstance{get; set;}
private void button1_Click(object sender, EventArgs e)
{
if(HelloServiceInstance!=null)
MessageBox.Show(HelloServiceInstance.SayHello());
}
}
然后在 run-time,例如在 OnLoad
方法或 Load
事件处理程序或表单的构造函数中,只需解析服务并设置 HelloServiceInstance 属性用户控件:
public Form1(IHelloService helloService)
{
InitializeComponent();
myUserControl1.HelloServiceInstance = helloService;
}
我有 winform 应用程序 我正在尝试将 UserControl 添加到我的表单,但出现此错误
这是我的用户控件
private readonly UserService userService;
private readonly UserValidator userValidator;
public UCUsers(UserService userService,UserValidator userValidator)
{
InitializeComponent();
this.userService = userService;
this.userValidator = userValidator;
}
但是当我在不使用依赖注入的情况下创建构造器时,它工作正常。
如何使用依赖注入的 UserControl。
设计器需要为您的控件生成代码;如果你在构造函数中有依赖,那么设计者如何生成一行代码来实例化你的控件呢?它应该传递给构造函数什么参数?
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
...
this.uCUsers1 = new UCUsers (??????, ??????);
...
您需要为 UserControl 创建一个无参数的构造函数,并为这些类型的依赖项定义一些属性。然后在 design-time 您可以使用您的控件,并且在 run-time 您可以设置这些依赖项,通过表单的构造函数解析它们(或直接通过服务容器解析)。
例如,您的用户控件应该是这样的:
public class MyUserControl: UserControl
{
public MyUserControl()
{
//...
}
public IHelloService HelloServiceInstance{get; set;}
private void button1_Click(object sender, EventArgs e)
{
if(HelloServiceInstance!=null)
MessageBox.Show(HelloServiceInstance.SayHello());
}
}
然后在 run-time,例如在 OnLoad
方法或 Load
事件处理程序或表单的构造函数中,只需解析服务并设置 HelloServiceInstance 属性用户控件:
public Form1(IHelloService helloService)
{
InitializeComponent();
myUserControl1.HelloServiceInstance = helloService;
}