• 避免循环依赖


    在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

    }

     
     
  • 相关阅读:
    手动异常处理
    CGRectXXX笔记
    UICollectionView高级实践
    关于流媒体(m3u8)的播放与下载
    关于检测应用安装和流量信息研究
    分析Tapjoy的模式—分发用于ios设备的企业级应用程序
    分析支付宝客户端的插件机制
    Unity3D for iOS初级教程:Part 3/3
    Unity3D for iOS初级教程:Part 2/3
    Unity3D for iOS初级教程:Part 1/3
  • 原文地址:https://www.cnblogs.com/jx270/p/3618720.html
Copyright © 2020-2023  润新知