InversifyJS: внедрение класса, который расширяет неинъекционный внешний модуль

Нужна помощь в реализации, связанной с Inversify. Я создаю класс, который расширяет EventEmitter от узла. когда я пытаюсь использовать inversify, он говорит, что EventEmitter не является инъекционным. Ниже приведен пример кода

//Интерфейс

export interface ISubscriber {
Connect(callback: Function);
on(event: string, listener: Function): this;
emit(event: string, ...args: any[]): boolean;
}

//Учебный класс

import {EventEmitter} from 'events';


@injectable()
class Subscriber extends EventEmitter implements ISubscriber {
logProvider: SCLogging.ILogger;
public constructor(
    @inject(TYPES.ILogger) logProvider: SCLogging.ILogger,
    @inject(TYPES.IConfig) config: IConfig
) {
    super();
    //Some Implementation
}

public Connect(callback) {
//Some Implementation
}

public on(event: string, listener: Function): this {
    super.on(event, listener);
    return this;
}

public emit(event: string, ...args: any[]): boolean {
    return super.emit(event, ...args);
}
}
export { ISubscriber, Subscriber }

// Определение привязки

kernel.bind<SCLogging.ILogger>(TYPES.ILogger).to(Logger);
kernel.bind<IConfig>(TYPES.IConfig).to(Config);
kernel.bind<ISubscriber>(TYPES.ISubscriber).to(Subscriber);

Я получаю ошибку

Error: Missing required @injectable annotation in: EventEmitter.

1 ответ

На вопросы InversifyJS на Github уже был получен очень похожий вопрос:

Вы можете вызвать декоратор, используя функцию decorate:

import { decorate, injectable } from "inversify";
decorate(injectable(), ClassName)

Проверьте https://github.com/inversify/InversifyJS/blob/master/wiki/basic_js_example.md для получения дополнительной информации.

Пожалуйста, обратитесь к вопросу о Github для получения дополнительной информации.

Настройка skipBaseClassChecks: true в параметрах контейнера отключает эту "функцию" инверсии.

См. Этот PR для более подробной информации https://github.com/inversify/InversifyJS/pull/841

Другие вопросы по тегам