2017-06-13 99 views
0

在我當前的應用程序中,爲了實現觀察者模式,我使用了「自制」的Observable類。觀察者(實現一個接口)可以聽某些事件。何時使用IoC容器註冊觀察員?

我將越來越多的項目切換到使用IoC容器,但是我沒有找到在代碼中註冊觀察者的好地方。

的方法可以做到這一點,我看到的是:

A)注射到觀察的觀察者。
構造函數不應該做實際工作,但即使使用方法或字段注入,也會將觀察者與observable耦合。如果是相反的話,情況也是如此。 B)創建一個可觀察的工廠並在那裏執行。
在這種情況下,創建observable取決於幾個觀察者的實現。

C)按工廠創建觀察者並在那裏執行。
雖然這對我來說似乎是最好的耦合,但對於DRY來說,結果不好。在某些情況下,工廠最終會成爲觀察者的字段和構造函數的副本,再加上可觀察值以及註冊的一行代碼。

有沒有辦法以一種乾淨的方式處理這種註冊?如果不是的話,是否有一些令人信服的論據來對其他人採用某種方式?

回答

0

解決方案發現了Resolve()和Instantiate()方法之間的區別。

我一直在使用Resolve()。這樣,我就會收到一個觀察者的方式,它被綁定到容器上。

但是,Instantiate()不關心類如何綁定到容器。它創建類的標準方式,但仍注入依賴關係。所以這可以在工廠內用於觀察者。