2013-12-18 91 views
2

我有两个服务和一个中介。如果我希望中介调用并由两个服务调用,我认为我需要使它们彼此依赖。这会导致循环依赖错误。避免与AngularJS中介模式的循环依赖关系

Person取决于Mediator调用Mediator方法

Mediator取决于Person调用Person方法

就是用事件或承诺,唯一的解决办法?我是否正确实施了这种模式?

+0

你可以展示你的一些代码 –

+1

的为什么你需要调解依赖于其他服务?不能让你的服务依赖于中介,并且一旦初始化了中介或类似的注册回调?如果不知道你想要做什么,很难说清楚。 – Beyers

回答

3

这是一个有点问题,超出了角度和JavaScript的IMOM。

构造中介以避免循环依赖的标准方法是使用接口,但javascript没有接口。

在你的情况下,如果你有中介注入服务,反之亦然,是的,会有一个错误。

假设您的介体也是服务,解决方法是不要将依赖关系注入到介体中,而是在介体曾经用于需要它进行调解的2个服务之前进行初始化。

替代方案不是使用中介对象,而是使用内置于$ broadcast和$ on的角度的发布者/订阅者模式。恕我直言,这给予甚至更宽松的耦合比介体模式,所以它有我的大拇指

+0

“在调解器曾经用于需要调解的2个服务之前初始化了什么”是什么意思?有一些代码可以演示吗? – poshest

+1

@OPEST试图将2 Person对象注入到中介中,由于循环依赖性,该中介没有工作。解决方法是使用类似initMediator(person1,person2)的函数来初始化调解器,其中介于两个对象之间。 – Anton

+0

@Anton,请编辑您的答案,以适应“*,而不是中介已被初始化之前它曾经使用*”的实施。请参阅我的问题:http://stackoverflow.com/questions/37889533/javascript-angular-mediator-pattern-tactics-for-obviating-circular-dependen – Cody

1

只有你的服务利用介体应该取决于介体。发布事件的服务注入调解人。订阅事件的服务注入调解器并注册服务中包含的回调。中介者不应该依赖于任何服务,它应该只包含将发布事件映射到回调引用列表。

见角例如中保我写here