避免循环依赖


在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

}

 
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM