在2个项目中相互引用工程会提示 将导致循环依赖,如果相互引用的dll可以暂时规避,但日后改成引用工程则会仍报错,解决办法如下:
using System; namespace ConsoleAppPreventCircularDependency { class Program { static void Main(string[] args) { //A a = new A(); //a.MethodA(); System.StackOverflowException AA aa=new AA(); aa.MethodAA(); } } /* * 双向耦合在同一个项目下,只是设计问题; * 在不同项目中,必须解耦,否则项目之间互相引用会提示 将导致循环依赖项 * * 一般来说,不应该存在双向耦合,有此情况则应考虑重构 */ #region 解耦前的代码 class A { private B b; public void MethodA() { Console.WriteLine("MethodA 已调用!"); b = new B(); b.MethodB();//“System.StackOverflowException”类型的未经处理的异常在 mscorlib.dll 中发生 } } class B { private A a; public void MethodB() { Console.WriteLine("MethodB 已调用!"); //请在循环调用的某个地方,添加相关中止语句,否则会报错 栈溢出 a = new A(); a.MethodA(); } } #endregion #region 解耦后的代码 /* * AA,BB分别在2个不同的项目中,提炼一个接口,放置在一个新起的项目中, * 然后AA,BB所在的项目引用该接口所在的项目。 */ interface ISample { void MethodAA(); } class AA : ISample { private BB bb; public void MethodAA() { Console.WriteLine("MethodAA 已调用!"); bb = new BB(); bb.MethodBB();//“System.StackOverflowException”类型的未经处理的异常在 mscorlib.dll 中发生 } } class BB { private ISample aa; public void MethodBB() { Console.WriteLine("MethodBB 已调用!"); //请在循环调用的某个地方,添加相关中止语句,否则会报错 栈溢出 aa = new AA(); aa.MethodAA(); } } #endregion }