我应该在注入的Angular服务上使用readonly而不是将它们公开吗?

问题描述 投票:0回答:1

今天我进行了讨论,我的一些同事说他们注入了他们的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();
    }
}

所以,虽然从技术上说他们是对的,但我仍然不相信我应该这样做。我问自己以下问题:

  1. DI是Angular的基本组成部分。如果有人真的这样做了,那么这个人是否应该更好地进入这个坑并且失败,或者他/她是否应该完全不能这样做
  2. readonly在这种情况下可能会因为几个原因而开始学习Angular和TypeScript的人很难理解 Angular在任何官方DI文档中都没有使用这种方法 你需要知道readonly如何工作,它只是保护我注入的服务的引用,但没有属性
  3. 在我看来,这是一个极端的案例问题,即使有一个简单的解决方案

你怎么看?有没有我可能没见过的官方参考资料?当我试图谷歌在Angular概念中使用readonly时,我没有找到任何东西

最后一句话:虽然它是100%真实 - 有可能操纵public service: Service的参考 - 我仍然不确定这是否应该解决,并且是否要这样做。

angular dependency-injection angular-services
1个回答
0
投票

你可以添加private readonly service : ServiceClass

© www.soinside.com 2019 - 2024. All rights reserved.