问题描述
让我们拥有一个根模块,例如:
@Module({
imports: [MikroOrmModule.forRoot({
MetadataProvider: TsMorphMetadataProvider,entities: ['dist/**/*.entity.js'],entitiesTs: ['src/**/*.entity.ts'],type: 'postgresql' as const,baseDir: path.resolve(__dirname,'..'),...
})],})
export class AppModule {}
使用此设置,我可以注入EntityManager
,但是@InjectRepository(User)
找不到提供者。
@Injectable()
export class SomeService {
constructor(@InjectRepository(user) userRepository: EntityRepository<User>) {}
}
如果我也将MikroOrmModule.forFeature([User])
插入根模块,它将不起作用。如果我将实体移到子模块中并在其中使用.forFeature
(就像文档中的示例一样),它将起作用。
是否可以使@InjectRepository()
工作而无需子模块和手动引用?由于Im已经找到具有斑点的实体,因此再次手动引用它们似乎违反了斑点模式的目的。
解决方法
blob模式是告诉ORM所有实体都有什么以及要建立什么连接。 forFeature
模式是向Nest注册所有实体,以便Nest可以为它们创建注入令牌。由于它们是独立的流程,因此无法仅使用其中一个。除非MikroOrmModule
实现像Nest的autoLoadEntities
(在TypeOrmModule和SequelizeModule上)那样的东西,否则将无法仅使用glob。