2013-12-18 40 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