我有一个UserRepository
它处理在数据库前面创建/验证用户。我想对用户的密码执行哈希和验证,因此我为此创建了一个单独的服务,尝试遵循单一责任原则,其声明如下:
@Injectable()
export default class HashService
我将其导入到我的模块中:
@Module({
imports: [TypeOrmModule.forFeature([UserRepository])],
controllers: [AuthController],
providers: [AuthService, HashService],
})
export class AuthModule {}
我想将它注入UserRepository
,我尝试将其作为构造函数参数传递,但它不起作用,因为它的基类已经接受了 2 个参数,所以我尝试在它们之后注入我的服务,如下所示:
@EntityRepository(User)
export default class UserRepository extends Repository<User> {
constructor(
entityManager: EntityManager,
entityMetadata: EntityMetadata,
@Inject() private readonly hashService: HashService,
) {
super();
}
// Logic...
}
But hashService
未定义,我也尝试过不使用@Inject()
装饰师。
最好的注射方式是什么HashService
进入我的存储库?我必须创建它的新实例吗?
简短的回答:你不知道。
TypeORM 的自定义存储库、存储库类和实体在技术上位于 Nest 的 DI 系统之外,因此不可能向其中注入任何值。如果你真的想去做,你可以弄清楚什么是Repository
类需要它的构造函数参数,并将它们添加到工厂中以实例化存储库类并直接使用它,而不是通过TypeOrmModule.forFeature
,但这是相当多的额外工作。
在我看来,自定义存储库模式在 Nest 中没有太大帮助,因为服务本质上保留了以下逻辑:CustomRepository
会。存储库类是通往数据库的门户,但不需要向其中添加任何额外的逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)