C # Круговые зависимости в Unity с инъекцией Ctor - PullRequest
1 голос
/ 10 октября 2011

Я знаю, что проблема круговых зависимостей в контексте внедрения зависимостей с помощью призмы / единства обсуждалась здесь и раньше.

Но я до сих пор не понимаю.Предположим, следующие классы:

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 и наоборот.Я не вижу четкого способа восстановить это, так как это кажется очень естественным дизайном.

Когда вы переходите по этой ссылке , есть подсказка, чтобы извлечь некоторые методы, но я все еще нене вижу, как я могу отделить эти объекты.Я читал об инверсии зависимостей, шаблоне наблюдателя, общих объектах, событиях и так далее.Мне кажется, что это все излишнее достижение простой связи между двумя объектами.

Является ли единственный способ решить эту проблему, чтобы работать с миллионами событий в приложении или общих объектах?Спасибо за помощь, Юрген

1 Ответ

2 голосов
/ 10 октября 2011

Я бы сделал метод IFeeder.Propagate событием, на которое регистрируется экземпляр IManager. Таким образом, у вас нет круговой ссылки.

Ваш пример здесь, кстати, не имеет ничего общего с единством. С моей точки зрения, это больше проблема дизайна, чем проблема единства.

...