我有一个PlayersModule
和一个ItemsModule
。
我想在PlayersService
中使用ItemsService
。
当我注射时:
import { Injectable } from '@nestjs/common';
import { InjectModel } from 'nestjs-typegoose';
import { ModelType, Ref } from 'typegoose';
import { Player } from './player.model';
import { Item } from '../items/item.model';
import { ItemsService } from '../items/items.service';
@Injectable()
export class PlayersService {
constructor(
@InjectModel(Player) private readonly playerModel: ModelType<Player>,
private readonly itemsService: ItemsService){}
我得到这个嵌套错误:
[Nest] 11592 - 2018-8-13 11:42:17 [ExceptionHandler] Nest无法解析PlayersService(+,?)的依赖项。请确保索引[1]处的参数在当前上下文中可用。
两个模块都导入到app.module.ts
中,两个服务在各自的模块中单独工作。
8条答案
按热度按时间ajsxfq5m1#
您必须在提供
ItemsService
的模块中导出ItemsService
:然后将导出模块导入到使用该服务的模块中:
不要️将同一个提供程序添加到多个模块。导出提供程序,导入模块。️
zsohkypk2#
假设您希望在我的TaskModule控制器中使用AuthModule中的AuthService
为此,您需要从AuthModule导出authService
然后在TaskModule中,您需要导入AuthModule(注意:导入AuthModule而不是TaskModule中的AuthService)
现在您应该能够在TaskController中使用DI了
型
swvgeqrz3#
这个问题是由Kim克恩回答的。但我只是想提醒通读这篇评论的人,每当你得到这个错误时,你应该按照以下步骤操作,这些步骤可能会帮助你轻松地找出卡住的地方:
例如,您有一个包含类别服务的类别模块,一个包含发布服务的发布模块,它将类别服务作为依赖项:
还有
不要忘记使用这个注解。Nest使用这个来检测单例类。在Sping Boot - Java中,这个曾经被称为Bean。阅读更多:
型
cidc1ykv4#
我通过从传递导出服务的构造函数的参数中删除
@Inject()
来解决问题。lmyy7pcs5#
我相信你也遇到了同样的问题。我的场景是两个兄弟自定义模块(user,auth)需要使用彼此的服务。我使用 circular DI 来解决它。请检查link
让我知道如果它解决了你的问题,也许我可以进一步建议你。
nle07wnf6#
通过更改导入提供程序的@Inject()中使用的常量字符串(TOKEN)的方式解决了我的问题...请小心使用index.ts和export * from module.ts,nest不会解析依赖关系
wwwo4jvm7#
基于Kim克恩的回答,我们现在应该只添加注入式服务到我们的服务中,而不需要任何装饰器(@Inject()不需要)。之后它就会正常工作。这是我的错误,可能会帮助其他人。
rlcwz9us8#
步骤1.导出所需的文件步骤2.导入整个模块。
我最初犯了一个错误,将文件添加为提供程序,并添加了引发错误的模块。