我正在开发一个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
}
我在构造函数上传递了每个对象。它有效,但我想知道是否有更简单(标准)的方法来做到这一点,而不是在每个构造函数调用上传递这些参数。
提前致谢。
答案 0 :(得分:1)
如果使用像Unity
这样的依赖注入容器来使用构造函数参数的构造函数解析,则可以将初始化对象加载到Unity容器中,然后使用Resolve<T>()
方法解析依赖关系。运行时意味着您不必在代码中将它们指定为参数 - 但它们仍然需要成为构造函数签名的一部分。
如果将Unity解析的类抽象出接口,则意味着只要接口保持不变,您可以在稍后阶段更改底层实现。
答案 1 :(得分:0)
建议的方法是不这样做。具有这些依赖关系的这种基类是一种代码气味,因为您隐藏了Form实现使用太多依赖关系这一事实,这表明违反了单一责任原则。违反SRP通常会导致难以掌握,难以维护代码。
相反,请防止使用这些默认&#39;的基类。依赖。如果类需要使用某些服务,请将其注入构造函数中。如果一个类需要太多的依赖项,那么它就是SRP违规的指示,你应该调查和重构;例如aggregate services。