NestJS无法解析模块内部的依赖关系

如何解决NestJS无法解析模块内部的依赖关系

我有两个模块:AuthModuleUserModule;

UserModule的外观如下:

@Module({
    imports: [
        forwardRef(() => AuthModule),TypeOrmModule.forFeature([
            UserRepository,UserAuthRepository,UserSocialRepository,])
    ],controllers: [UserController],exports: [UserAuthService,UserSocialService,UserService],providers: [UserAuthService,})
export class UserModule {}

该模块具有3个服务:UserAuthServiceUserSocialServiceUserService

UserAuthService内容

@Injectable()
export class UserAuthService {

    /**
     * UserAuthService constructor
     * @param { UserAuthRepository } _userAuthRepository
     * @param { UserRepository } _userRepository
     * @param { UserService } _userService
     * @param { UserSocialService } _userSocialService
     */
    constructor(
        private readonly _userAuthRepository: UserAuthRepository,private readonly _userRepository: UserRepository,private readonly _userService: UserService,private readonly _userSocialService: UserSocialService
    ) {}
}

UserSocialService内容

@Injectable()
export class UserSocialService {

    /**
     * UserSocialService constructor
     * @param { UserSocialRepository } _userSocialRepository
     */
    constructor(
        private readonly _userSocialRepository: UserSocialRepository,) {}
}

UserService内容

@Injectable()
export class UserService {

    /**
     * UserService constructor
     * @param { UserRepository } _userRepository
     * @param { UserAuthService } _userAuthService
     * @param { UserSocialService } _userSocialService
     */
    constructor(
        private readonly _userRepository: UserRepository,private readonly _userAuthService: UserAuthService,private readonly _userSocialService: UserSocialService
    ) {}
}

AuthModuleUserModule都具有forwardRef(() => Module)的含义,因为它们彼此依赖。

但是,问题出在UserModule内部,更具体地说是UserService,由于某种原因,它无法解决UserAuthService依赖性,从而产生了以下错误

Error: nest can't resolve dependencies of the UserService (UserRepository,?,UserSocialService). Please make sure that the argument dependency at index [1] is available in the UserModule context.

Potential solutions:
- If dependency is a provider,is it part of the current UserModule?
- If dependency is exported from a separate @Module,is that module imported within UserModule?
  @Module({
    imports: [ /* the Module containing dependency */ ]
  })

这是UserModule的结构:

user/
    controllers/
    dtos/
    exceptions/
    models/
    repositories/
    services/
        - index.ts
        - user.auth.service.ts
        - user.service.ts
        - user.social.service.ts
    subscribers/
    -index.ts

因此,即使所有3个服务都在一个模块中,并且将它们导出并标记为提供程序,nestJS出于某种原因仍无法解决它们。

解决方法

我不确定100%,但是我认为您需要使用@InjectRepository注入存储库,就像在example中一样:

@Injectable()
export class UserAuthService {

    constructor(
        @InjectRepository(UserAuthRepository)
        private readonly _userAuthRepository: UserAuthRepository,@InjectRepository(UserRepository)
        private readonly _userRepository: UserRepository,private readonly _userService: UserService,private readonly _userSocialService: UserSocialService
    ) {}
}
,

您的UserServiceUserAuthService之间具有循环依赖关系。这两个服务都应使用@Inject(forwardRef(() => OtherService))以确保即使通过循环依赖也可以进行注入。

通常,您应该尽量避免这些类之间的相互依赖,这是否意味着要打破类的范围,让其仅访问所需的内容,或者很难将这些类合并在一起。

>
@Injectable()
export class UserService {
  constructor(
    @InjectRepository(UserRepository)
    private readonly _userRepo: UserRepository,@Inject(forwardRef(() => UserAuthService))
    private readonly _userAuthService: UserAuthService,private readonly _userSocialService: UserSocialService
  ) {}
}
@Injectable()
export class UserAuthService {
  constructor(
    @InjectRepository(UserAuthRepository)
    private readonly _userAuthRepository: UserAuthRepository,@InjectRepository(UserRepoitory)
    private readonly _userRepository: UserRepository,@Inject(forwardref(() => UserSerivce))
    private readonly _userService: UserService,private readonly _userSocialService: UserSocialService
  ) {}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?