关于循环依赖和工厂方法的问题

本文关键字:工厂 方法 问题 依赖 于循环 循环 | 更新日期: 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);
}