我有一个用于创建具体对象的工厂库(项目),并且我有多个用于具体对象的库。
现在我想要一个具体的对象库来调用工厂库来获取另一个具体的对象。但由于循环依赖,我不能这样做。我正在使用 C#。
有什么解决办法吗?非常感谢帮助。
我有一个用于创建具体对象的工厂库(项目),并且我有多个用于具体对象的库。
现在我想要一个具体的对象库来调用工厂库来获取另一个具体的对象。但由于循环依赖,我不能这样做。我正在使用 C#。
有什么解决办法吗?非常感谢帮助。
一个有用的解决方案是创建第三个项目,在其中放置指向其他两个的方法。
例如:
项目 A:工厂图书馆
项目 B:具体对象
项目 C(新的):将使用项目 B 类和项目 A 库的方法。
通用:创建特定项目以拆分具有循环依赖关系的类。
希望能帮助到你。
更新:
X --> A --> B(实际)
问题:
B --> A(循环依赖)
解决方案:
从 B 调用的 A 的拆分部分到一个新项目 C(也必须从 X 指向)
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);
}