Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加此项目将导致循环依赖关系_C#_.net_Wpf_.net Assembly - Fatal编程技术网

C# 添加此项目将导致循环依赖关系

C# 添加此项目将导致循环依赖关系,c#,.net,wpf,.net-assembly,C#,.net,Wpf,.net Assembly,我有一个由两个程序集组成的WPF应用程序 程序集A是一个wpf应用程序 Assembly B是一个3D应用程序,带有一个主要由a使用的公共API 程序集A引用了程序集B 现在,当程序集B上触发事件时,我需要在静态类应用程序中调用程序集a中的方法 如果尝试在B中添加对程序集a的引用,则会出现错误: 添加此项目将导致循环依赖关系 你对如何解决这个问题有什么想法吗 具体而言,我想知道: 如何从程序集B在A中调用App.myMethod() 为了解耦这些类,我可以在程序集B上触发一个泛型事件并在程序集

我有一个由两个程序集组成的WPF应用程序

程序集A是一个wpf应用程序

Assembly B是一个3D应用程序,带有一个主要由a使用的公共API

程序集A引用了程序集B

现在,当程序集B上触发事件时,我需要在静态类应用程序中调用程序集a中的方法

如果尝试在B中添加对程序集a的引用,则会出现错误:

添加此项目将导致循环依赖关系

你对如何解决这个问题有什么想法吗

具体而言,我想知道:

  • 如何从
    程序集B
    在A中调用
    App.myMethod()
  • 为了解耦这些类,我可以在程序集B上触发一个泛型事件并在程序集a上捕获它吗
  • 欢迎提出任何其他想法

    • 听起来像是设计问题。由于我不知道您实施过程中的具体细节,请将以下内容作为指导方针/想法

      当事件在B上触发时,我假设它会创建一些数据。如果您可以将此数据存储在数据库或类似数据库中,然后在应用程序a中可能会有一个定时事件,该事件主要侦听此数据,然后根据需要提供更新

      如何从程序集B调用A中的
      App.myMethod

      如果A依赖于B,你就不能

      如果事件是从B中的某个类触发的,则应从A中的某个类订阅该事件:

      A中的代码:

      var classB = new ClassB();  // presumably in your code in A somewhere
      classB.MyEvent += new EventHandler(this.HandleEventFromB);
      
      
      public void HandleEventFromB(object sneder, EventArgs args)
      {
          ClassA.StaticMethod();
      }
      
      这样B就不依赖于A


      您可能需要将B中的事件“冒泡”到某个公开事件,以便从A订阅该事件。

      如果您添加对已构建DLL的引用,而不是项目,则可以添加该事件。

      事件是如何创建的?作为初始化的一部分创建时,是否可以将
      静态类
      传递到事件中?控制模式反转的设计就是为了处理这种情况。我可以更改两个程序集的源代码。现在程序集B中的事件处理程序是私有的void OnTouchDownHandler(对象发送者,Windows7.Multitouch.TouchEventArgs e){AddTouchDown(e.Id,e.Location);}能否将静态方法移动到B或a和B都引用的第三个程序集?谢谢juharr,有趣的方法,但我不能移动静态B也不能创建第三个程序集。您仍然具有循环依赖关系,并且必须单独构建每个项目。该项目仍然可以在同一解决方案中同时构建,只是不能添加为项目引用。它将像这样工作,这不是最优雅的解决方案。