将对象注入表单

时间:2014-12-01 12:40:36

标签: c# winforms dependency-injection

我正在开发一个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
}

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

建议的方法是这样做。具有这些依赖关系的这种基类是一种代码气味,因为您隐藏了Form实现使用太多依赖关系这一事实,这表明违反了单一责任原则。违反SRP通常会导致难以掌握,难以维护代码。

相反,请防止使用这些默认&#39;的基类。依赖。如果类需要使用某些服务,请将其注入构造函数中。如果一个类需要太多的依赖项,那么它就是SRP违规的指示,你应该调查和重构;例如aggregate services