2013-04-24 48 views
1

我有一个工厂库(项目)创建具体的对象,我有多个库的具体对象。问题与循环的倾向和工厂方法

现在我想要一个具体的对象库来调用工厂库来获得另一个具体的对象。但由于循环依赖关系,我无法这样做。我正在使用C#。

有没有解决方案?非常感谢帮助。

+0

把你的厂库使用需要从其他图书馆使用无论是在工厂的另一个库和参考这里面的代码库和具体对象库... – Marco 2013-04-24 06:05:15

+1

欢迎来到堆栈溢出!你能否发布一些更多的信息,特别是一些代码,显示你已经尝试了什么?回答你的问题并不容易,因为它没有足够的信息。 – 2013-04-24 06:05:52

回答

1

尝试接口设计。要做到这一点,请为混凝土和工厂使用界面。然后做构造函数注入。你也可以做属性注入,这取决于你,但构造函数注入更好恕我直言。

项目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); 
} 
+0

这对我很有用。芬迪,你真的节省我的时间。非常感谢你。美好的一天! – user2310061 2013-04-24 07:08:39

+0

@ user2310061不客气。仅供参考,这种设计称为依赖(构造函数)注入,有或没有抽象工厂模式。 – Fendy 2013-04-24 08:28:14

2

对此的一个有用的解决方案是创建第三个项目,您可以将方法指向另外两个方法。

例如:

A计划:厂库

项目B:具体对象

项目C(新一):其中会使用到B项目类别和项目库方法。

一般:创建特定的项目来拆分具有循环依赖关系的类。

希望它有帮助。

更新:

X - > A - > B(实际)

问题:

乙 - > A(循环依赖)

解决方案:

从B调用到新项目A的拆分部分,C (谁也必须被从X指出)

X - > A - >乙

X - “ç

问题解决了:乙 - > C(无循环依赖)

+0

感谢您的反馈。但抱歉,我不清楚,谁将创建项目C.现有的流程是项目X:外观库调用项目A:获得项目B的工厂库:具体对象。现在项目B需要重新调用项目A以获得另一个项目D:另一个具体对象。 – user2310061 2013-04-24 06:17:31

+0

我已经用更深的解释更新了主要答案。 – Javiere 2013-04-24 06:36:17