Nest.js:如何覆盖导入模块中的提供程序?
Posted
技术标签:
【中文标题】Nest.js:如何覆盖导入模块中的提供程序?【英文标题】:Nest.js: how to override providers in an imported module? 【发布时间】:2020-03-04 02:23:07 【问题描述】:代码示例
第三方库@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
提供程序? (没有第三方库补丁)
【问题讨论】:
首先,您为什么要这样做?我建议使您的模块动态化并接受您可以使用的特定实例的提供者 【参考方案1】:根据我的评论,这就是您如何使用动态提供程序制作动态模块
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
【讨论】:
以上是关于Nest.js:如何覆盖导入模块中的提供程序?的主要内容,如果未能解决你的问题,请参考以下文章