У меня проблема с классом AdonisJS.
Мой код LoginController
export default class LoginController {
constructor(protected authService: AuthService) {}
@inject()
doLogin({ request }) {
return this.authService.doLogin(request)
}
}
Код AuthService
export default class AuthService {
constructor(private userRepository: UserRepositoryInterface) {}
// login user
@inject()
async doLogin(request: any) {
const { email, password } = request.only(['email', 'password'])
try {
// get user by email
const user = await this.userRepository.getByEmail(email)
if (!user) {
} else {
if (user.active === StatusEnum.ACTIVE) {
const userLogin = this.userRepository.verifyCredentials(email, password)
if (await userLogin) {
const token = this.userRepository.createToken(user)
const response = {
token: token,
}
} else {
}
} else {
}
}
} catch (error) {
}
}
}
Я вызываю AuthService в LoginController, и это работает.
private authService = new AuthService
Целью является вызов конструктора для использования во всем коде функции, а ошибка приведена ниже.
При выполнении я получаю эту ошибку
"message": "Cannot construct \"[class LoginController]\" class. Container is not able to resolve its dependencies. Did you mean to use @inject decorator",
"name": "RuntimeException",
"status": 500,
Вы можете помочь?
Спасибо






Вы получаете эту ошибку из-за позиции декоратора @inject().
Вам нужно использовать декоратор @inject() поверх того места, куда вы хотите ввести.
Например, вы должны написать декоратор над объявлением класса, чтобы внедрить что-то внутри конструктора вашего класса.
@inject()
class MyService {
constructor(private someOtherService: SomeOtherService) {}
}
Этот код добавит экземпляр SomeOtherService в ваш конструктор.
Если вы хотите внедрить что-то непосредственно в метод, вы должны написать декоратор над объявлением метода.
class AuthController {
@inject()
doLogin({}: HttpContext, someOtherService: SomeOtherService) {}
}
Здесь мы внедряем экземпляр SomeOtherService непосредственно внутрь метода.
--
Поэтому, чтобы исправить вашу проблему, вы должны написать декоратор @inject() над объявлением вашего класса, поскольку вы хотите внедрить свою зависимость внутри конструктора вашего класса.