c#在Unity中的循环依赖与Ctor注入

本文关键字:依赖 Ctor 注入 循环 Unity | 更新日期: 2023-09-27 18:10:55

我知道之前在prism/unity的依赖注入中讨论过循环依赖的问题。

但我还是不明白。假设有以下类:

class Feeder : IFeeder    { 
  IManager _MM, 
  Feeder(IManager MM)
  {
     this._MM = MM;
  }
  public void Start()
  {
  ...
  }
  public void Stop()
  {
  ...
  }
  private Propagate()
  {
     _MM.ConsumeFeed()
  }
};
class FeedManager : IManager
{
   IFeeder _Feeder;
   FeedManager(IFeeder Feeder)
   {
      this._Feeder = Feeder;
   }
   public ConsumeFeed()
   {
   ...
   }
   private Shutdown()
   {
      _Feeder.Stop();
   }
   private StartUp()
   {
      _Feeder.Start();
   }
};

这显然是一个循环依赖,因为Feeder依赖于FeedManager,反之亦然。我没有看到一个明确的方法来解决这个问题,因为它似乎是一个非常自然的设计。

当你遵循这个链接时,有一个提示来提取一些方法,但我仍然不知道如何解耦这些对象。我读了依赖性倒置、观察者模式、共享对象、事件等等。在我看来,为了实现两个对象之间的简单关系,这似乎有点小题大做。

解决这个问题的唯一方法是在应用程序或共享对象中处理一百万个事件吗?谢谢你的帮助,Juergen

c#在Unity中的循环依赖与Ctor注入

我将创建IFeeder。传播IManager实例注册到的事件方法。这样就不会有循环引用。

顺便说一下,你在这里的例子与团结无关。在我看来,这更像是一个设计问题,而不是统一问题。