Я столкнулся с такой проблемой: я создаю Event Manager с возможностью обработки нескольких конкретных поставщиков, и я борюсь с проблемой инъекций зависимостей здесь.TypeScript InversifyJS: асинхронное связывание
Я использую: [email protected]
, [email protected]
, [email protected]
, [email protected]
Давайте посмотрим, что в коде:
const socketIO: SocketIO.Server = io.listen(instance);
kernel.bind<SocketIO.Server>(TYPES.SocketIO).toConstantValue(socketIO);
const eventManager: IEventManager = kernel.get<IEventManager>(TYPES.IEventManager);
eventManager.init(kernel.getAll<IEventManagerProvider>(TYPES.IEventManagerProvider));
console.log(eventManager);
И консоль регистрирует меня, что менеджер событий undefined
, который разбивает все приложение. Но ... Когда я отключить kernel.getAll(...)
от инициализации, то я получаю только то, что я ожидал:
const eventManager: IEventManager = kernel.get<IEventManager>(TYPES.IEventManager);
eventManager.init([]);
console.log(eventManager);
дает мне: MultipleProvidersEventManager { providers: {} }
. Метод инициализации очень прост сам по себе и содержит:
@provideSingleton(TYPES.IEventManager)
class MultipleProvidersEventManager {
...
public init(providers: IEventManagerProvider[]): void {
forEach(providers, this.registerProvider);
}
public registerProvider(provider: IEventManagerProvider): void {
if (this.providers[provider.type()]) {
throw new Error('Event Manager provider already registered');
}
console.log('Registered ' + provider.type() + ' event manager provider');
this.providers[provider.type()] = provider;
}
...
}
Так что моя проблема в том, что я должен ждать с не вызывая метод инициализации до всех необходимых объекты хранятся надлежащим образом в InversifyJS контейнере и могут быть возвращены. Но я не знаю, как :(. Может кто-нибудь объяснить мне, как я должен решить эту проблему?
файл белых ich содержит код: https://github.com/sdudziak/js-app-kickstarter/blob/master/src/server/bootstrap.ts –