我想将一个提供程序实现注入到Angular中同一提供程序的另一个其他实现中,但是我无法实现这一点。 我的想法是我可以使用第一个实现的数据来专门化第二个实现 正如我在角度文档中所读到的,不可能使用同一提供者的第二种实现,但是我想知道是否有人通过某种方式达到了此目的
谢谢
export abstract class Provider {
abstract someMethod();
}
export class implProviderOne implements Provider{
someMethod(){
}
}
export class implProviderTwo implements Provider{
constructor(private provider: Provider) {} // I DI injects implProviderOne in this implementation
someMethod(){
}
}
//This is what I try
//Main Module
//main.module.ts
@NgModule({
...
imports: [InnerModule],
providers:[
{ provide: Provider, useClass:implProviderOne}
],
...
})
export class MainModule {}
//Inner Module
//inner.module.ts
@NgModule({
...
{provide: Provider, useClass:implProviderTwo } // What I can do to achieve this?
...
})
export class InnerModule {}
答案 0 :(得分:0)
要更改某些提供程序之前,需要先声明它。
@Injectable()
export class ProviderService {
public someMethod(){
console.log('My injected provider')
}
}
@Injectable()
export class ProviderTwoService {
public someMethod(){ console.log("My swiched provider") }
}
@Injectable()
export class implProviderOneService {
constructor(private provider: ProviderService) {} <<< this way u inject remember it need to have scope like private, public, protected
someFunction() {
this.provider.someMethod() <<< this way u use injected service
}
}
//This is what I try
//Main Module
//main.module.ts
@NgModule({
...
providers:[
ProviderService,
{ provide: ProviderService, useClass:ProviderTwoService}
],
...
})
{ provide: ProviderService, useClass: ProviderTwoService }
这是用于将ProviderService更改为ProviderTwoService的,因此无论您在哪里注入并且使用第一个提供程序,都将注入第二个。