有时当我设计我的类时,我需要一些具有相似构造函数参数的依赖类。假设我们有
interface IDependency {
void DoSomething();
}
class DependencyClass : IDependency {
public DependencyClass(int length) {...}
...
}
class MainClass {
public MainClass(int length, IDependency dependency) {...}
...
}
MainClass
需要一个 DependencyClass
的实例,具有相同的 length
。我有两种方法来处理它:
不直接创建
MainClass
的实例,而是始终从工厂获取它们。这样我就可以确保将所需的IDependency
实例提供给MainClass
构造函数。将工厂接口(interface)(例如
IDependencyFactory
)传递给MainClass
构造函数而不是IDependency
。这样我就可以在我的MainClass
实现中获得所需的DependencyClass
实例。
我不确定它们中的任何一个是否是一个不错的选择。在这种情况下是否有最佳实践?
最佳答案
这是一个非常有趣的问题,答案在于您在这里尝试实现的目标。
解决方案 1. 您提供的将使您的 IDependency
成为主工厂接口(interface),所有实例都将使用 IDependency
接口(interface)实现,该接口(interface)将为您提供具有很大的可扩展性 - 您将能够使用 IDependency
接口(interface)在未来初始化具有不同功能的其他类,这是工厂设计模式的经典使用和实现。
解决方案 2. 您提供的将使您的 MainClass
很好,程序的主类,您将处理主类中的实例及其行为以及优势这里是你可以通过 IDependency
管理你所有的实例,而你在 MainClass
中做的唯一一件事就是处理它们的逻辑,MinaClass
将是您的实例传输器和基类的所有基本更改都将在接口(interface) IDependency
中进行,这是 Dependency Inversion 的经典解决方案。
问题仍然存在,您要实现的目标是什么。考虑这个问题和两种可能性,你就有了答案。
关于c# - 注入(inject)具有与更高级别类相同的构造函数参数的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51817115/