У меня есть существующий машинописный проект, использующий inversify.Я определил регистратор в моих ТИПАХ на TYPES.ILoggger
, и когда я получаю доступ к регистратору непосредственно из моего контейнера, он работает:
import {ILogger} from "./interfaces/ILogger";
import {TYPES} from "./interfaces/TYPES";
import container from "./kernel/inversify.config";
const loggerFromTheContainer: ILogger = container.get<ILogger>(TYPES.ILogger);
loggerFromTheContainer.info("I WILL LOG"); // this works
Так что мои настройки должны быть в порядке.
Я неЯ не хочу получать доступ к контейнеру напрямую, но я хочу использовать инъекцию свойств.[InversifyJS ' README предоставляет пример:
Если вы предпочитаете это, вы можете использовать инъекцию свойства вместо инъекции конструктора, поэтому вам не нужно объявлять конструктор класса:
@injectable()
class Ninja implements Warrior {
@inject(TYPES.Weapon) private _katana: Weapon;
@inject(TYPES.ThrowableWeapon) private _shuriken: ThrowableWeapon;
public fight() { return this._katana.hit(); }
public sneak() { return this._shuriken.throw(); }
}
и я пытаюсь следовать этому.
Тем не менее, когда я пытаюсь внедрить регистратор посредством инъекции свойства, я внезапно получаю undefined
как регистратор, и я незнать почему:
@injectable()
class ShouldHaveLogger {
@inject(TYPES.ILogger) private logger: ILogger;
constructor() {
this.logger.info("Hello World"); // this.logger will remain undefined
}
}
new ShouldHaveLogger();
Будет генерироваться общий
TypeError: Cannot read property 'info' of undefined
, поскольку this.logger
не вводится.Но почему и как это исправить?