为什么我应该在简单的对象配置上使用Angular的依赖注入?

时间:2017-08-30 16:15:31

标签: angular dependency-injection

Angular文档显示了在您没有注入类时,在构造函数中使用@inject注入值(配置对象)的示例。

https://angular.io/guide/dependency-injection#non-class-dependencies

我能够让这个工作,但我不确定我理解这个用例的重点。因为它不是创建实例的类 - 它只是一个被读取的配置对象,为什么我不会导入它并在需要的地方读取它。即使我想将值注入构造函数,我仍然要对类进行导入。

这是否只是为了确保在类开始构建时该值是可用的,因为它在构造函数中?

我只是不确定我是否看到了DI的价值并觉得我可能遗漏了一些东西。

2 个答案:

答案 0 :(得分:3)

DI主要是关于可测试性。您可以轻松覆盖测试中的提供者 如果直接访问值,则需要修改要测试的类或组件的代码,以便自定义测试行为。

还有其他优点,例如能够在中央位置(指定提供程序)配置应用程序,以针对不同的用例自定义它。

答案 1 :(得分:0)

如果是第一方代码,主要关注的是可测试性。如果代码属于公共包,或者单元正在解耦并移动到单独的位置 包,它的可扩展性。如果在提供程序类中使用config对象:

import config from '...';

class SomeProvider {
    constructor() {
        this.config = config;
    }
}

它需要将提供程序子类化为使用另一个配置对象。如果在提供程序方法中直接使用config而不是this.config,则应覆盖这些方法。如果config也是提供者,则可以避免这种情况。

这是公共软件包中的一个大问题,因为开发人员没有预见到有理由扩展这段代码。因此,项目需要分叉而不是使用框架功能,以便在没有太多努力的情况下使其灵活。

您永远不知道何时需要扩展或替换配置。