簡體   English   中英

Nest.js:如何覆蓋導入模塊中的提供程序?

[英]Nest.js: how to override providers in an imported module?

代碼示例

第三方庫
@Module({ providers: [AService] exports: [AService] }) export class AModule { } @Module({ imports: [AModule], providers: [BService] exports: [BService] }) export class BModule { }
我的代碼
@Module({ imports: [BModule], providers: [CService] }) export class CModule { }

問題

如何從我的代碼中覆蓋/替換AService提供程序? (沒有第三方庫補丁)

繼我的評論之后,這就是 go 關於使用動態提供程序制作動態模塊的方式


export interface ProviderInterface {
  handle(): void;
}

@Injectable()
class SomeHandlingProvider {
  constructor(@Inject('MY_DYNAMIC_PROVIDER') private readonly dynamicProvider: ProviderInterface) {}
  handle(): void {
    this.dynamicProvider.handle();
  }
}

@Module({})
export class AModule {
  public static forRoot(provider: ProviderInstance): DynamicModule {
    return {
       module: AModule,
       providers: [
         {
           provide: 'MY_DYNAMIC_PROVIDER',
           useClass: provider,
         },
         SomeHandlingProvider,
      ],
    };
  }
}

然后你可以像這樣使用


class GenericDynamicProviderExample implements ProviderInterface {
  handle(): void {
    console.log('hello');
  }
}

@Module({
  imports: [
    AModule.forRoot(GenericDynamicProviderExample),
  ],
})
export class BModule {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM