2011-10-10 20 views
1

我知道在这里讨论了依赖注入与棱镜/统一关系的循环依赖问题。C#在Ctor中的循环依赖关系Cors注入

但我仍然不明白。假设以下类:

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(); 
    } 
}; 

这显然是一个圆形的dependcy,因为馈线取决于FeedManager和副verca。我没有看到明确的方法来解决这个问题,因为它似乎是一个非常自然的设计。

当你按照这link有一个提示来提取一些方法,但我仍然没有看到我如何去耦这些对象。 我读了关于依赖倒置,观察者模式,共享对象,事件等内容。 对我来说,这似乎都是为了达到两个对象之间的简单实用而矫枉过正。

解决此问题的唯一方法是使用应用程序或共享对象中的一百万个事件吗? 感谢您的帮助,Juergen

回答

2

我会使IFeeder.Propagate方法成为IManager实例注册的事件。这样你就没有循环引用。

你的例子在这里与团结无关。从我的角度来看,这不仅仅是一个统一问题,更是一个设计问题。

+0

是的,它的设计问题。事情是,这个统一使用Ctor注射剂和它的易用性来通过推进注射(延迟实例化机制)来克服这一点。所以一般来说,要避免这是使用事件。但正如我所说,我想避免在应用程序中有一百万个事件。 – Juergen

+1

为什么你想避免事件?从我的观点来看,没有理由避免发生事件。 – PVitt

+0

假设FeedManager也引发了Feeder应该消耗的事件。然后再次有循环依赖。在这种情况下,eventaggregator会成为解决方案吗? – Juergen