在 Angular 5 中,如果我有扩展抽象的 AbstractClassService
和 ExtendedClassService
,我可以在我的 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 {}
其他提供者配置(useValue
、useExisting
、useFactory
)也可以在那里使用。
感谢 Abinesh 的 this comment这让我找到了the linked blog post .非常感谢博主!
关于Angular 6 providedIn - 如何自定义 @Injectable() 提供程序以进行依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50489412/