JHipster AngularX应用添加实体报错:无QuestionService等服务提供者
看起来你遇到的是Angular依赖注入的典型问题——虽然你手动在AppModule里添加了服务提供者,但JHipster的模块化结构其实已经帮你处理了这些配置,手动添加反而导致了冲突。下面是具体的解决方案和原因分析:
第一步:移除AppModule中重复的服务提供者
打开你的app.module.ts,把providers数组里的所有实体服务(包括QuestionService、QuizService、UserProfileService等)全部移除。JHipster生成的ConductionTestsEntityModule已经包含了所有实体服务的正确配置,手动添加会让Angular的注入器陷入混乱,无法找到正确的服务实例。
修改后的providers应该是这样:
providers: [ ProfileService, customHttpProvider(), PaginationConfig, UserRouteAccessService ],
第二步:验证EntityModule的配置
检查src/main/webapp/app/entities/entity.module.ts,确认它已经导入了QuizModule和QuestionModule。JHipster通过JDL生成代码时应该自动添加了这些导入,不过还是确认一下:
import { NgModule } from '@angular/core'; import { QuizModule } from './quiz/quiz.module'; import { QuestionModule } from './question/question.module'; // 其他实体模块的导入... @NgModule({ imports: [ // 其他实体模块 QuizModule, QuestionModule ] }) export class ConductionTestsEntityModule {}
第三步:确认实体模块的服务配置
再检查每个实体的子模块(比如quiz.module.ts和question.module.ts),确保它们的providers数组里已经包含了对应的服务:
比如quiz.module.ts:
@NgModule({ imports: [ // 必要的Angular模块导入 ], declarations: [ QuizComponent, QuizDetailComponent, QuizDialogComponent, QuizDeleteDialogComponent ], entryComponents: [ QuizDialogComponent, QuizDeleteDialogComponent ], providers: [ QuizService ] }) export class QuizModule {}
question.module.ts同理,必须包含QuestionService在providers里。
为什么会出现这个问题?
JHipster的AngularX项目采用了模块化的架构设计,EntityModule作为所有实体相关功能的统一入口,每个实体的子模块(比如QuizModule)负责管理自己的组件、服务和路由。当你在AppModule里重复注册这些服务时,Angular的依赖注入系统会出现冲突,导致无法正确解析服务实例,最终抛出NullInjectorError。
如果以上步骤都无法解决问题,你可以尝试重新生成这两个实体:
jhipster entity Quiz jhipster entity Question
这会确保所有相关文件(包括模块、服务、组件)都被正确生成,避免手动修改导致的配置缺失。
内容的提问来源于stack exchange,提问作者Gozus19

