使用AngularJS中介模式避免循环依赖

使用AngularJS中介模式避免循环依赖,angularjs,design-patterns,mediator,Angularjs,Design Patterns,Mediator,我有两项服务和一名调解人。如果我想让中介调用两个服务并被它们调用,我认为我需要使它们相互依赖。这会导致循环依赖项错误 Person依赖于中介来调用中介方法 中介依赖于Person来调用Person方法 是使用事件或承诺的唯一解决方案吗?我是否正确地实现了这个模式?这是一个超出角度和javascript imho的问题 构造中介以避免循环依赖的标准方法是使用接口,但javascript没有接口 在您的情况下,如果将中介注入到服务中,反之亦然,则会出现错误 假设您的中介也是一个服务,解决方法不是将依

我有两项服务和一名调解人。如果我想让中介调用两个服务并被它们调用,我认为我需要使它们相互依赖。这会导致循环依赖项错误

Person依赖于中介来调用中介方法

中介依赖于Person来调用Person方法


是使用事件或承诺的唯一解决方案吗?我是否正确地实现了这个模式?

这是一个超出角度和javascript imho的问题

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

在您的情况下,如果将中介注入到服务中,反之亦然,则会出现错误

假设您的中介也是一个服务,解决方法不是将依赖项注入中介,而是在中介与您需要中介的2个服务一起使用之前对其进行初始化


另一种选择是不使用中介对象,而是使用发布者/订阅者模式,该模式内置于带有$broadcast和$on的angular中。imho,这比中介模式提供了更松散的耦合,因此我对它竖起了大拇指

这是一个超出角度的问题,并扩展到javascript imho

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

在您的情况下,如果将中介注入到服务中,反之亦然,则会出现错误

假设您的中介也是一个服务,解决方法不是将依赖项注入中介,而是在中介与您需要中介的2个服务一起使用之前对其进行初始化


另一种选择是不使用中介对象,而是使用发布者/订阅者模式,该模式内置于带有$broadcast和$on的angular中。我想,这比中介模式提供了更松散的耦合,因此我对它赞不绝口

只有使用中介的服务应该依赖于中介。发布事件的服务注入中介。订阅事件的服务注入中介并注册服务中包含的回调。中介不应该依赖于这两个服务,它应该只包含将发布事件映射到回调引用列表的映射


请参阅我编写的示例中的中介

只有使用中介的服务才应该依赖于中介。发布事件的服务注入中介。订阅事件的服务注入中介并注册服务中包含的回调。中介不应该依赖于这两个服务,它应该只包含将发布事件映射到回调引用列表的映射


查看我编写的示例中的中介

能否展示一些代码为什么需要中介依赖于其他服务?你不能让你的服务依赖于中介,一旦初始化,在中介内部注册回调或者类似的东西吗?如果不知道您想要做什么,就很难说出。您可以展示一些代码吗?为什么需要中介依赖于其他服务?你不能让你的服务依赖于中介,一旦初始化,在中介内部注册回调或者类似的东西吗?如果不知道您想要做什么,很难判断。在将中介用于您需要它进行中介的2个服务之前,它初始化了什么?有没有可能用一些代码来演示?@poshest OP尝试将两个人的对象注入到中介中,但由于循环依赖关系,中介无法工作。解决方法是使用类似于函数initMediatorperson1、person2的函数,该函数使用两个对象之间的中介来初始化中介。@Anton,请编辑您的答案以适应的实现,但最好在使用中介之前对其进行初始化。请参阅我的问题:在中介器与您需要它来中介的2个服务一起使用之前,它初始化了什么?有没有可能用一些代码来演示?@poshest OP尝试将两个人的对象注入到中介中,但由于循环依赖关系,中介无法工作。解决方法是使用类似于函数initMediatorperson1、person2的函数,该函数使用两个对象之间的中介来初始化中介。@Anton,请编辑您的答案以适应的实现,但最好在使用中介之前对其进行初始化。请看我的问题: