gpt4 book ai didi

angular - 使用 DI 进行类注入(inject)有什么意义吗

转载 作者:行者123 更新时间:2023-12-04 03:14:25 25 4
gpt4 key购买 nike

在 angular1 中,我们经常使用工厂来注入(inject)类,而不是实例。在 angular2 中,我可以做同样的事情:

{provide: MyClass, useFactory: () => { return MyClass }}

...
constructor(MyClass) {
let instance = new MyClass();
}

但是,我记得读过,这是因为没有 JS 模块。现在我们使用了ES6模块,我想知道是否需要使用DI来进行类注入(inject)?我看到许多库不使用 Angular DI 来获取类,而是通过 import 语句访问它们。

最佳答案

{provide: MyClass, useFactory: () => { return MyClass }}

{provide: MyClass, useValue: MyClass }

本质上是一样的。是的,对应该手动实例化的类使用 DI 是有意义的。

在 JS (ES.Next) 中执行 DI 时不会产生问题:

constructor(@Inject(MyClass) MyClass) {
this.MyClass = new MyClass;
}

但在 TypeScript 中使用可能不太方便,因为需要正确指定类型:

constructor(@Inject(MyClass) MyClass: typeof MyClass) {
this.MyClass = new MyClass;
}

将其作为提供者允许随时替换或扩充功能而无需修补原始代码,这对于第三方库来说是一个很好的特性。

并且它提供了更好的可测试性,MyClass 可以替换为 stub 类或 spy 函数。当不涉及 DI 时,这会使测试更加复杂,并且需要在导入级别实现 DI,例如使用 rewire-webpack

关于angular - 使用 DI 进行类注入(inject)有什么意义吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42350057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com