当我第一次了解angular-redux
库时,我认为库中最吸引人的部分是@select
装饰器,这意味着我不必注入store service
每次我想从商店中选择。
这让我想知道 - 装饰师如何获得对该服务的访问权? 我研究了源代码,偶然发现了@select和NgRedux (the store service)代码。
显然,初始化服务时会保存static instance
服务,decorator
会访问此实例。
我想知道这种做法是否可以接受,因为我已经喜欢这个想法,而且我自己也用它来为我的服务创建decorators
和rxjs operators
,但是保存单身人士的想法对我来说仍然很奇怪,感觉就像一个奇怪的黑客。
同样,我希望您对这种做法的可接受程度持怀疑态度,以及是否有办法使用Angular
Dependency Injection
来避免这种做法。
感谢阅读!
答案 0 :(得分:0)
根据定义,NgModules中定义的服务是惰性单例。这意味着如果您不打算使用组件的providers
部分覆盖服务,则可以安全地保存对服务实例的引用。
主要缺点是可测试性问题,在这种情况下,您必须支付这个价格才能方便使用。