在Angular 5中,如果我有一个扩展了抽象类的
这将使我能够轻松地在测试或其他情况下切换
AbstractClassService
和ExtendedClassService
,我可以在NgModule的providers数组中执行以下操作:@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 {}
providedIn
只是用于定位注入器,该注入器将负责注入ExtendedClassService
类的实例。对于此操作,它将使用根注入器。如果您不想使用根注入器,则可以指定任何其他模块。然后,服务实例将由包含该模块的注入器创建。 - NiladriuseFactory
来提供一个工厂函数,负责在需要动态创建实例时进行创建。 - NiladriAbstractClassService
——因为这是在组件中注入的内容——而不是ExtendedClassService
。 - BeetleJuice