将对象注入表单

本文关键字:表单 注入 对象 | 更新日期: 2023-09-27 18:32:32

我正在开发一个WinForms应用程序,我需要在每个表单中都有一些对象,并且我不想初始化每个表单上的每个对象,因此,我创建了一个基类:

public class FormBase : Form
{
    #region Properties
    public BusinessLogic.ChppManager ChppManager { get; protected set; }
    public BusinessLogic.DatabaseManager DatabaseManager { get; protected set; }
    public BusinessLogic.FileManager FileManager { get; protected set; }
    public BusinessLogic.RegistryManager RegistryManager { get; protected set; }
    #endregion Properties
}

我在构造函数上传递这些对象中的每一个。它有效,但我想知道是否有更简单(标准)的方法来做到这一点,而无需在每个构造函数调用上传递这些参数。

提前谢谢。

将对象注入表单

如果使用依赖项

注入容器(如 Unity)来使用构造函数参数的构造函数解析,则将初始化的对象加载到 Unity 容器中,然后使用 Resolve<T>() 方法在运行时解析依赖项,这意味着您不必在代码中将它们指定为参数 - 但是它们仍然需要成为构造函数签名的一部分。

如果将这些 Unity 解析的类抽象到接口,则意味着只要接口保持不变,就可以在稍后阶段更改底层实现。

建议的

方法是不要这样做。具有这些依赖项的此类基类是一种代码异味,因为您隐藏了 Form 实现使用过多依赖项的事实,这表明违反了单一责任原则。违反 SRP 通常会导致更难掌握、难以维护的代码。

相反,请防止使用采用这些"默认"依赖项的基类。如果一个类需要使用某些服务,请将其注入到构造函数中。如果一个类需要太多的依赖项,则表明存在 SRP 冲突,您应该调查和重构;例如聚合服务。