[英]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 { }
My code
我的代码
@Module({ imports: [BModule], providers: [CService] }) export class CModule { }
How can I override/replace the AService
provider from my code?如何从我的代码中覆盖/替换AService
提供程序? (without third party library patching) (没有第三方库补丁)
Following on from my comment, this is how you would go about making a dynamic module with a dynamic provider继我的评论之后,这就是 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,
],
};
}
}
Then you can use like this然后你可以像这样使用
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.