博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
避免循环依赖
阅读量:6080 次
发布时间:2019-06-20

本文共 1572 字,大约阅读时间需要 5 分钟。

在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 }
 
 

转载地址:http://keqgx.baihongyu.com/

你可能感兴趣的文章
jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器
查看>>
IP地址的分类——a,b,c 类是怎样划分的
查看>>
编译Boost 详细步骤
查看>>
spring-mybatis-data-common程序级分表操作实例
查看>>
秒杀多线程第四篇 一个经典的多线程同步问题
查看>>
[连载]JavaScript讲义(03)--- JavaScript面向对象编程
查看>>
Redis 性能问题的记录
查看>>
有用的U盘修复工具
查看>>
挖一挖C#中那些我们不常用的东西之系列(4)——GetHashCode,ExpandoObject
查看>>
Android Activity初探
查看>>
VC++ CopyFile函数使用方法
查看>>
Android 环境搭建 版本问题
查看>>
android WebView总结
查看>>
JS获取客户端IP地址、MAC和主机名七种方法
查看>>
Python:使用基于事件驱动的SAX解析XML
查看>>
python解析json
查看>>
普林斯顿公开课 算法1-11:并查集的应用
查看>>
MySQL数据库优化详解(收藏)
查看>>
poj 1182 食物链 (带关系的并查集)
查看>>
WINDOWS系统Eclipse+NDK+Android + OpenCv
查看>>