2017-06-08 29 views
0

在我的解決方案,有2個項目:幫助和Service.Helper項目有服務循環依賴錯誤,而試圖添加引用

參考在幫助項目中,我有

文化助手

public static class CultureHelper 
    { 
    public static Location GetLocationBasedOnCulture(string cultureName) 
      { 
       Location location = Location.UK; 
       if (cultureName == Constants.CultureConstants.Italy) 
       { 
        location = Location.Italy; 
       } 
       return location; 
      } 
    } 

文化常量:

public static class CultureConstants 
    { 
     public static readonly string UK = "en-GB"; 
     public static readonly string Italy = "it-IT"; 

    } 

在服務我想添加這個方法:

public Enum DetermineLocation() 
     { 
      var culture = CultureHelper.GetCurrentCulture(); 
      Location location = CultureHelper.GetLocationBasedOnCulture(culture); 
      return location; 
     } 

我想一個方法添加到使用靜態CultureHelper一流的服務,但我無法添加引用服務幫手因爲它會導致循環依賴。我如何繼續這樣做。正在創建一個接口來解決這個問題,以及如何。

+1

目前尚不清楚(CultureHelper)在哪一方面取決於「服務」,因此不清楚循環依賴的產生方式。 –

+0

你需要第三個助手項目。您不能以這種方式添加參考。一個項目應該添加對其他項目的引用以及其他不能添加已經參照該項目的項目的引用。 –

+0

@BhubanShrestha - 你可以在.NET程序集之間有循環依賴關係,但它遠非常規,我通常會推薦它。 (許多中央程序集都有這樣的交叉引用) –

回答

2

您無法在該項目中添加已引用您的第一個項目的項目引用。說

你有兩個項目項目A項目B 現在你在添加引用項目B項目A 當您嘗試的添加引用項目A項目B你會得到循環依賴作爲你將一個項目指向另一個項目。

所以要解決這個問題,你應該創建項目C,爲添加引用項目B終於可以在添加項目C參考項目A

1

1)創建第三個項目(C)與項目A和B共有的類型,並讓A和B參考C.

2)將B中的類型移至A中的類型(或反之亦然)。

0

如果您的項目真的需要互相參照,並且您無法使用其他建議進行重構,請參閱演示如何實現相互參照。

在Visual Studio中,創建一個新的解決方案並添加一個名爲A的普通類庫。單獨離開Class1

創建一個共享項目並將其命名爲Proto_B。添加一個名爲Class1的類並將其名稱空間聲明更改爲B

創建一個名爲B_NonA的類庫。刪除Class1。將共享項目引用添加到Proto_B,並更改設置,使其默認名稱空間爲B,併發出B程序集。將項目A的參考添加到項目B_NonA

創建一個名爲B_A的類庫。刪除Class1。將共享項目引用添加到Proto_B,並更改設置,使其默認名稱空間爲B,併發出B程序集。還要將其設置爲包含所有配置的條件編譯符號HASA。將項目B_A的參考添加到項目A

現在所有的代碼都可以編譯。您將分發的組件將是由AB_A項目發出的組件。

您永遠不會將代碼添加到B_AB_NonA,只能到ProtoB。如果代碼必須實際使用A裝配特徵,那麼該代碼應該包裝在#if HASA區塊中。

在這個玩具的例子,A.Class1是:

namespace A 
{ 
    public class Class1 
    { 
     private static B.Class1 _otherB = new B.Class1(); 
    } 
} 

而且在ProtoBB.Class1是:

namespace B 
{ 
    public class Class1 
    { 
#if HASA 
     private static A.Class1 _otherA = new A.Class1(); 
#endif 
    } 
} 

一個明顯的缺點這種方法是,它會導致較長的建設時間,因爲在任何改變B要求B重建兩次,在兩者之間執行構建A