2014-10-17 124 views
-3

我在兩個項目下面有兩個類,每個類需要調用其他類的方法。 但不能相互添加引用,因爲它正在創建循環依賴關係。循環依賴的解決方案

我知道我必須使用界面來解決問題,但我不能滿足答案。 請讓我知道如何執行&解決這個問題。

項目的Test2

namespace Test2 
    { 
     public class ClassTest2 
     { 
      public string GetClassTest2() 
      { 
       return "classTest2"; 
      } 
     } 
    } 

項目Test1的

namespace Test1 
{ 
    public class ClassTest1 
    { 
     public string GetClassTest1() 
     { 
      return "classTest1"; 
     } 
    } 
} 
+1

如何將你的個別班級正在獲得另一班的實例? – Paddy 2014-10-17 13:28:05

+3

代碼示例在這裏沒有添加任何內容 - 它們似乎並不代表實際的問題場景,因爲它們顯示的都是兩個完全獨立的類。另外,請解釋哪些障礙妨礙您將兩個課程放在單個項目中。 – 2014-10-17 13:28:05

+0

可能重複的[如何解決循環引用?](http://stackoverflow.com/questions/6928387/how-to-solve-circular-reference) – Christian 2014-10-17 13:29:42

回答

1

你需要一個第三個項目中,您定義的接口:

public interface IClassNameAware 
{ 
    string GetClassName(); 
} 

無論從現有的項目,請參閱ENCE這種新的裝配並使類實現的接口:

public class ClassTest1 : IClassNameAware 
{ 
    public string GetClassName() 
    { 
     return "classTest1"; 
    } 

現在,這兩個類仍然不能直接訪問海誓山盟,但他們接受IClassNameAware變量,即:

public bool ClassNamesEqual(IClassNameAware otherClass) 
    { 
     return GetClassName().Equals(otherClass.GetClassName()); 
    } 
} 
+0

另一種方法是創建一個單獨的程序集來保存第一類和第二類的接口。然而任何需要這種「黑客」來完成的設計都需要重新考慮。 – Cameron 2014-10-17 15:57:16

+0

@Cameron在單獨的程序集中定義了一個接口是非常常見的(我稱之爲「項目」,因爲這是OP使用的術語)。想想ADO.NET和單獨的提供者。創建一個包含另一個底層實現的實現來添加一個抽象層也是有意義的。 OP沒有分享他的意圖,但我不同意它本身就是黑客。 – 2014-10-17 17:56:04