Angular文档显示了在您没有注入类时,在构造函数中使用@inject
注入值(配置对象)的示例。
https://angular.io/guide/dependency-injection#non-class-dependencies
我能够让这个工作,但我不确定我理解这个用例的重点。因为它不是创建实例的类 - 它只是一个被读取的配置对象,为什么我不会导入它并在需要的地方读取它。即使我想将值注入构造函数,我仍然要对类进行导入。
这是否只是为了确保在类开始构建时该值是可用的,因为它在构造函数中?
我只是不确定我是否看到了DI的价值并觉得我可能遗漏了一些东西。
答案 0 :(得分:3)
DI主要是关于可测试性。您可以轻松覆盖测试中的提供者 如果直接访问值,则需要修改要测试的类或组件的代码,以便自定义测试行为。
还有其他优点,例如能够在中央位置(指定提供程序)配置应用程序,以针对不同的用例自定义它。
答案 1 :(得分:0)
如果是第一方代码,主要关注的是可测试性。如果代码属于公共包,或者单元正在解耦并移动到单独的位置 包,它的可扩展性。如果在提供程序类中使用config对象:
import config from '...';
class SomeProvider {
constructor() {
this.config = config;
}
}
它需要将提供程序子类化为使用另一个配置对象。如果在提供程序方法中直接使用config
而不是this.config
,则应覆盖这些方法。如果config
也是提供者,则可以避免这种情况。
这是公共软件包中的一个大问题,因为开发人员没有预见到有理由扩展这段代码。因此,项目需要分叉而不是使用框架功能,以便在没有太多努力的情况下使其灵活。
您永远不知道何时需要扩展或替换配置。