Angular 9 + NgRx v9中ProductsEffects依赖注入失败求助
解决NgRx Effects v9中"Can't resolve all parameters for ProductsEffects"的问题
这个错误在Angular 9 + NgRx v9的环境里,大概率是依赖注入配置不全导致的,结合你给出的代码细节,我帮你梳理几个最可能的排查方向和解决方案:
1. 给ProductsEffects添加@Injectable()装饰器
这是最常见的原因!NgRx Effects类必须被@Injectable()装饰器标记,哪怕你用的是Angular 9的providedIn: 'root'语法,Effects模块需要通过这个装饰器识别它并完成依赖注入。
你的代码里没提到这个装饰器,大概率是漏掉了,补上之后应该就能解决参数无法解析的问题:
import { Injectable } from '@angular/core'; import { Actions } from '@ngrx/effects'; // 确保是从@ngrx/effects导入的Actions import { AppService } from './your-app-service-path'; import * as ProductsActions from './products.actions'; @Injectable() // 必须添加这个装饰器! export class ProductsEffects { constructor( private actions$: Actions<ProductsActions>, private appService: AppService ) {} // 你的Effect逻辑代码... }
2. 确认Actions的导入来源正确
要保证Actions是从@ngrx/effects包导入的,而不是从@ngrx/store或者其他地方错导进来的——这也是容易踩的坑,错导的话Angular DI系统找不到对应的注入令牌,就会抛出参数解析错误。
正确的导入应该是:
import { Actions } from '@ngrx/effects';
3. 排查AppService的潜在注入问题
虽然你已经给AppService标记了@Injectable({providedIn: 'root'}),但还是要确认:
- 没有在其他模块的
providers数组里重复声明AppService(重复声明会覆盖root级别的注入,可能导致DI混乱) AppService本身没有循环依赖问题(比如AppService注入了Store,而ProductsEffects又注入了AppService,这种情况可以尝试用forwardRef来解决,但v9版本一般会自动处理基础的循环依赖)
4. 确认EffectsModule的配置无误
你当前的EffectsModule.forRoot(EFFECTS)配置是正确的,但要确保ProductsEffects在AppModule里是正确导入的,没有拼写错误或者路径错误。
按照上面的步骤排查,尤其是第一步添加@Injectable()装饰器,应该就能解决你遇到的参数解析错误了。
内容的提问来源于stack exchange,提问作者JH-Sen-Ren
相关产品推荐
相关产品推荐

