具有依赖项注入的 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;
}