Angular中NgModule的providers和imports顺序会影响依赖注入吗?

Top丶甜雅 阅读 32

在Angular项目里,我遇到一个奇怪的问题。当我在NgModule的providers数组里提前声明了一个服务,然后再在imports里导入了包含该服务的SharedModule,启动时提示“找不到提供者”。如果反过来,先导入SharedModule再声明服务,反而能正常运行。这顺序真的有影响吗?我尝试查文档但没找到明确说明,求大神指点!

// 错误的配置(先providers后imports)
@NgModule({
  providers: [MyService],
  imports: [SharedModule.forRoot()], // SharedModule也提供了MyService
  declarations: [AppComponent]
})
export class AppModule {}
我来解答 赞 12 收藏
二维码
手机扫码查看
2 条解答
俊含 Dev
顺序确实有影响,Angular会按模块定义顺序合并providers,后面导入的模块会覆盖前面同名的provider。最简单的办法是统一在SharedModule里提供服务,外面只导入模块不要重复声明。

@NgModule({
imports: [SharedModule.forRoot()],
declarations: [AppComponent]
})
export class AppModule {}
点赞 3
2026-02-12 10:08
皇甫洋博
这是Angular依赖注入机制的问题,顺序确实有影响。providers里的提供者会覆盖imports中模块提供的同名服务,所以先声明MyService会导致SharedModule里的MyService被忽略。正确的写法是:

@NgModule({
imports: [SharedModule.forRoot()], // 先导入模块
providers: [], // 不要在providers里重复声明
declarations: [AppComponent]
})
export class AppModule {}


应该是这样就能正常工作了,别折腾顺序了,按这个来吧。
点赞 7
2026-01-30 21:06