Экземпляр Inversify не вводится должным образом

Я использую inversify в hapijs v20 и машинописном тексте.

Когда я пытаюсь связать зависимость в классе, который будет обрабатывать такие запросы:

import * as Hapi from '@hapi/hapi'
import { injectable, inject } from "inversify";
import { types } from "../types";

@injectable()
export default class SomeController implements SomeInterface {
    private dep: any

    public constructor(@inject(types.SomeDependecy) dep: SomeDependecy) {
        this.dep = dep
    }

    public validate(request: Hapi.Request, reply: Hapi.ResponseToolkit): Hapi.ResponseObject {

        const result = this.dep.validate(request) // The headache line

        return reply.response(result)
    }
    
}

а затем введите этот класс, чтобы зарегистрировать такой маршрут:

public constructor(@inject(types.SomeController) controller: SomeController) {
        this.controller = controller
    }

    public async register(server: Server) {
        await server.route([
            {
                method: 'POST',
                path: '/validate',
                handler: this.controller.validate
            }
        ])
    }

Все загружается нормально, и кажется, что экземпляры созданы. Однако, когда я попадаю в конечную точку, я получаю:

TypeError: Cannot read property 'dep' of undefined

Выброшено из строки, закомментированной в контроллере как строка головной боли :C

Ребята, вы знаете, что может быть причиной этого?


person RicardoE    schedule 26.12.2020    source источник


Ответы (1)


После некоторых исследований я нашел ответ на этот вопрос:

Hapi показывает неопределенную переменную внутри обработчика

и изменил регистрацию на это:

await server.route([
            {
                method: 'POST',
                path: '/validate',
                handler: (request, reply) => {
                   return this.controller.validate(request, reply)
                }
            }
        ])
person RicardoE    schedule 26.12.2020