今天我进行了讨论,我的一些同事说他们注入了他们的Angular服务:
constructor(readonly language: I18nService)
他们说他们这样做是因为它阻止我的组件的消费者改变注入的服务,有点像:
@Component({ ... })
class ComponentA {
constructor(public language: I18nService) {}
}
@Component({ ... })
class ComponentB {
@ViewChild(ComponentA) compA: ComponentA;
constructor() {
this.compA.language = new I18nService();
}
}
所以,虽然从技术上说他们是对的,但我仍然不相信我应该这样做。我问自己以下问题:
readonly
在这种情况下可能会因为几个原因而开始学习Angular和TypeScript的人很难理解
Angular在任何官方DI文档中都没有使用这种方法
你需要知道readonly
如何工作,它只是保护我注入的服务的引用,但没有属性你怎么看?有没有我可能没见过的官方参考资料?当我试图谷歌在Angular概念中使用readonly
时,我没有找到任何东西
最后一句话:虽然它是100%真实 - 有可能操纵public service: Service
的参考 - 我仍然不确定这是否应该解决,并且是否要这样做。
你可以添加private readonly service : ServiceClass