在Angular中的同一提供程序的其他实现中使用提供程序的实现

时间:2019-06-26 16:12:27

标签: angular design-patterns

我想将一个提供程序实现注入到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 {}

1 个答案:

答案 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的,因此无论您在哪里注入并且使用第一个提供程序,都将注入第二个。