8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

注册的 Nest.js 拦截器未用于依赖注入

zygisk 1月前

23 0

是否有技巧可以让 useValue 依赖注入在 Nest.js 拦截器中正常工作?我有一个类似于此的动态模块:@Module({})export class SomeFeatureModule { static

是否有技巧可以让 useValue Nest.js 拦截器的依赖注入正常工作?我有一个类似于此的动态模块:

@Module({})
export class SomeFeatureModule {
  static register({
    perRequestParams,
    ...clientOptions
  }: ModuleOptions): DynamicModule {
    const provider = new SomeClientProvider(clientOptions);
    return {
      module: SomeFeatureModule,
      providers: [
        {
          provide: SomeClientProvider,
          useValue: provider,
        },
        {
          provide: SomeInterceptor,
          useValue: new SomeInterceptor(provider, perRequestParams),
        },
      ],
      exports: [SomeClientProvider, SomeInterceptor],
    };
  }
}

...其中的 SomeInterceptor 课程是这样的:

@Injectable()
export class SomeInterceptor implements NestInterceptor {
  constructor(
    private readonly someClientProvider: SomeClientProvider,
    private readonly perRequestParams: (
      context: ExecutionContext,
    ) => EvaluationCriteria | Promise<EvaluationCriteria>,
  ) {}

  async intercept(
    execContext: ExecutionContext,
    next: CallHandler<any>,
  ): Promise<Observable<any>> {
    const params = await this.perRequestParams(execContext);
    return this.someClientProvider.injectLocalStorageData(params, () => next.handle());
  }
}

...但是当我尝试 使用 拦截器时:

@UseInterceptors(SomeInterceptor)

...我收到错误:

错误:Nest 无法解析 SomeInterceptor(SomeClientProvider,?)的依赖项。请确保索引 [1] 处的参数函数在 AppModule 上下文中可用。

我专门导入了 SomeFeatureModule.register(...) 我的 AppModule

@Module({})
export class AppModule {
  static register(env: Environment): DynamicModule {
    // ...
    return {
      module: AppModule,
      imports: [
        SomeFeatureModule.register({
          ...clientConfig,
          async perRequestParams(ctx) {
            // ...
          },
        }),
      ],
      // ...
    };
  }
}

为什么依赖注入系统会尝试解析构造函数参数, SomeInterceptor 即使我已经手动提供了一个?

请注意,如果我删除它, @Injectable() 就不会出现相同的启动错误,但是拦截器的构造函数在没有参数的情况下被调用,因此这也会损坏。

帖子版权声明 1、本帖标题:注册的 Nest.js 拦截器未用于依赖注入
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由zygisk在本站《typescript》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 这个答案对我来说有点令人困惑,但这可能是因为我刚接触 nest.js。我想委托给他们的 DI 容器,但我没有向 DI 容器注册该拦截器吗?

返回
作者最近主题: