我目前正在使用TypeOrm完成NestJS的数据库集成文档。在这些文档中,有一些示例展示了如何使用NestJS中的app.module注入自定义数据库存储库。所有这些示例都使用自定义存储库的实际类型注入类。
@Injectable()
export class AuthorService {
constructor(private authorRepository: AuthorRepository) {}
}
此代码通过app.modules注入,方法是提供如下导入:
@Module({
imports: [TypeOrmModule.forFeature([AuthorRepository])],
controller: [AuthorController],
providers: [AuthorService],
})
export class AuthorModule {}
如果你对实现编程没问题的话,这很好用,但是我更喜欢在我的类中使用接口。我已经在以前的question中找到了通过NestJS接口注入类的解决方案,但是当我尝试像这样注入我的自定义仓库时,它似乎不能正确地示例化,并且变得未定义。(node:16658) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'save' of undefined
因此,我假设您只能通过app.模块中的forFeature()
调用注入customRepositories,但据我所知,这不允许我使用接口进行注入。有没有其他方法可以注入自定义TypeOrm仓库,而不必替换实现自定义仓库的所有接口?提前感谢!
编辑
这是我目前的代码,我设法让它注入,但这仍然迫使我每次调用构造函数时使用实现而不是接口。这主要是由于模拟测试时的一个问题。
第一个
2条答案
按热度按时间h22fl7wq1#
它应该使用
InjectRepository
装饰器来工作,其中您指定了Repository,但随后您键入is作为您的接口,而在测试时您只需提供IFooRepository
!示例代码:
7y4bm7vi2#
好吧,算是让它工作了。基于这个答案https://stackoverflow.com/a/74561702/913136,我用了一个抽象类作为接口(你实际上可以
implement
它),因为它不需要传递字符串作为令牌。唯一的缺点是滥用了抽象类。还不确定我是否喜欢它。不幸的是,以同样的方式使用一个实际的接口似乎是不可能的。
临时接口:
实施:
第一次