关于循环依赖和工厂方法的问题
本文关键字:工厂 方法 问题 依赖 于循环 循环 | 更新日期: 2023-09-27 18:10:42
我有一个用于创建具体对象的工厂库(项目),我有多个用于创建具体对象的库。
现在我想要一个具体的对象库来调用工厂库来获得另一个具体对象。但是由于循环依赖,我不能这样做。我正在使用c#。
有什么解决办法吗?非常感谢您的帮助。
一个有用的解决方案是创建第三个项目,在其中放置指向另外两个项目的方法。
例如:Project A: Factory Library
项目B:具体对象
项目C(新项目):使用项目B类和项目A库的方法。
General:创建特定的项目来拆分具有循环依赖的类。
希望有帮助。
更新:X -> A -> B(实际)
问题:
B -> A(循环依赖)
解决方案:
将从B调用到新项目C(也必须从X指向)的A部分拆分
X -> A -> B
X -> C
问题解决:B -> C(无循环依赖)
尝试界面设计。为此,使用混凝土和工厂的接口。然后进行构造函数注入。你也可以做属性注入,这取决于你,但构造函数注入更好。
项目A:具体对象和工厂的接口
那么你的具体对象,项目B,是引用项目A。所有对象都是从A实现的接口,并且只在接口中接受参数。注入工厂,而不是在具体对象中创建它。例:
public class ConcreteObjectA : IConcreteObjectA{
public ConcreteObjectA(IFactoryObjectB factoryB){
factoryB.Create();
}
}
那么你的工厂对象,项目C,是引用项目b。所有工厂都在接口中实现,并且只返回接口。例:
public class FactoryObjectB : IFactoryObjectB {
public IConcreteObjectB Create(){
return new ConcreteObjectB();
}
}
来自客户端的使用将是这样的:
public void CreateObjectA(){
FactoryObjectB factory = new FactoryObjectB();
ConcreteObjectA objectA = new ConcreteObjectA(factory);
}