gpt4 book ai didi

javascript - Nest.js : how to override providers in an imported module?

转载 作者:行者123 更新时间:2023-12-03 07:11:15 31 4
gpt4 key购买 nike

代码示例

第三方库

@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我的代码中的提供者? (没有第三方库补丁)

最佳答案

继我的评论之后,这就是您如何使用动态提供程序制作动态模块


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 {}

关于javascript - Nest.js : how to override providers in an imported module?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58749839/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com