Angular 6 providedIn - 如何为依赖注入定制@Injectable() provider?
Angular 6 providedIn - how to customize the @Injectable() provider for dependency injection?
在 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 {}
我需要做两件事。
首先,在创建继承class时使用implements
而不是extends
并且不要使用providedIn
键那里:
@Injectable() // removed providedIn
export class ExtendedClassService implements AbstractClassService {}
其次,将提供者说明添加到摘要中 class 改为:
@Injectable({providedIn: 'root', useClass: ExtendedClassService})
export abstract class AbstractClassService {}
其他供应商配置(useValue
、useExisting
、useFactory
)也可以在那里使用。
功劳归功于 Abinesh which led me to the linked blog post。非常感谢博主!
在 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 {}
我需要做两件事。
首先,在创建继承class时使用implements
而不是extends
并且不要使用providedIn
键那里:
@Injectable() // removed providedIn
export class ExtendedClassService implements AbstractClassService {}
其次,将提供者说明添加到摘要中 class 改为:
@Injectable({providedIn: 'root', useClass: ExtendedClassService})
export abstract class AbstractClassService {}
其他供应商配置(useValue
、useExisting
、useFactory
)也可以在那里使用。
功劳归功于 Abinesh