gpt4 book ai didi

Angular 6 providedIn - 如何自定义 @Injectable() 提供程序以进行依赖注入(inject)?

转载 作者:太空狗 更新时间:2023-10-29 17:05:01 35 4
gpt4 key购买 nike

在 Angular 5 中,如果我有扩展抽象的 AbstractClassServiceExtendedClassService,我可以在我的 NgModule 的提供者数组中这样做:

@NgModule({
providers: [
{provide: AbstractClassService, useClass: ExtendedClassService}
]
})
export class AppModule {}

这将允许我很容易地将 ExtendedClassService 与另一个切换以进行测试或其他任何操作。这仍然可以通过 Angular 6 完成,但是有一个新的 providedIn 选项可以在服务本身中设置以减少包大小:

@Injectable({providedIn: 'root'})
export class ExtendedClassService extends AbstractClassService {}

有没有办法让我在使用新的 providedIn 的同时完成与 Angular 5 相同的事情?像这样:

@Injectable({providedIn: 'root', provide: AbstractClassService})
export class ExtendedClassService extends AbstractClassService {}

最佳答案

我需要做两件事。

首先,在创建继承类时使用 implements 而不是 extends 并且不要使用 providedIn 键那里:

@Injectable() // removed providedIn
export class ExtendedClassService implements AbstractClassService {}

其次,改为将提供者指令添加到抽象类中:

@Injectable({providedIn: 'root', useClass: ExtendedClassService})
export abstract class AbstractClassService {}

其他提供者配置(useValueuseExistinguseFactory)也可以在那里使用。

感谢 Abinesh 的 this comment这让我找到了the linked blog post .非常感谢博主!

关于Angular 6 providedIn - 如何自定义 @Injectable() 提供程序以进行依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50489412/

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