尝试添加引用时出现循环依赖性错误

在我的解决方案中,有两个项目:Helper和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类的服务添加一个方法,但是我无法在服务中添加对helper的引用,因为它将导致循环依赖。 我该如何继续这样做。 正在创建一个接口来解决这个问题以及如何解决。

您无法在已经审阅过您的第一个项目的项目中添加项目的引用。 说

你有两个项目ProjectAProjectB现在你在ProjectA中添加ProjectB的引用当你尝试在ProjectB中添加ProjectA的引用时,你会得到循环依赖,因为你是一个项目彼此。

因此,要解决此问题,您应该创建ProjectC ,添加对ProjectB的引用,最后您可以在ProjectA中添加ProjectC的引用

1)创建第三个项目(C),其中包含项目A和B共有的类型,并让A和B引用C.

2)移动B中的类型,这取决于A到A中的类型(反之亦然)。

如果您的项目真的需要相互交叉引用,并且您无法使用其他建议进行重组,那么这里是一个如何实现相互交叉引用的演示。

在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程序集function,该代码应包含在#if HASA块中。

在这个玩具示例中, A.Class1是:

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

B.Class1中的ProtoB是:

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

这种方法的一个明显缺点是它会导致更长的构建时间,因为B任何更改都需要在两次之间执行A的构建时重建B两次。