2013-04-24 41 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