在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 {}
答案 0 :(得分:12)
我需要做两件事。
首先,在创建继承类时使用implements
而不是extends
,而不在那里使用providedIn
键:
@Injectable() // removed providedIn
export class ExtendedClassService implements AbstractClassService {}
其次,将提供者指令添加到抽象类中:
@Injectable({providedIn: 'root', useClass: ExtendedClassService})
export abstract class AbstractClassService {}
其他提供商配置(useValue
,useExisting
,useFactory
)也可以在那里使用。
归功于Abinesh FAQ,导致我this comment。非常感谢博客作者!