當我第一次瞭解到angular-redux
庫時,我認爲庫中最誘人的部分是裝飾器@select
,這意味着我不必每次都注入store service
我想從商店中選擇。保存角度服務的單例實例
這讓我納悶 - 怎麼裝飾可以訪問該服務?
我研究的源代碼,和偶然發現了@select和NgRedux (the store service)代碼。
很明顯,當服務初始化時,該服務的static instance
被保存,並且decorator
訪問此實例。
我想知道這種做法是多麼可以接受,因爲我喜歡這個想法,並且我自己用它來爲我的服務創建decorators
和rxjs operators
,但保存單例的想法對我來說仍然很奇特,感覺就像一個奇怪的黑客。
再一次,我很樂意聽到你對這種做法是否可以接受的看法,以及是否有辦法使用Angular
的Dependency Injection
來避免這種情況。
感謝您的閱讀!在NgModules定義的
我的問題不在於組件,指令,管道或服務,這些都是'@ Injectable'。我的問題是不屬於角度的東西 - 比如'decorators'和'rxjs operators',人們用它來定製他們的代碼。我知道這種方法有效,它在我的代碼中有奇效,但我希望這樣做會有更多'DI'-y方法。 –
角的DI不提供類似於代理或攔截任何功能和不支持財產注射,所以它是不可能得到噴油器的參考或服務,而無需將其通過構造函數。這意味着你將不得不使用工廠服務來使用裝飾器,併爲使用裝飾器的每個服務做一些管道工作。在自定義rxjs操作符中使用服務的唯一簡潔方法是直接將它們作爲參數傳遞。所以它是乾淨的設計和使用方便之間的妥協。 – kemsky