저는 이러한 종류의 문제에 직면 해 있습니다. 저는 여러 가지 구체적인 공급자를 처리 할 수있는 이벤트 관리자를 만들고 있습니다. 여기서는 종속성 주입 문제로 고심하고 있습니다. 는 [email protected]
, [email protected]
, [email protected]
, [email protected]
TypeScript InversifyJS : 비동기 바인딩
코드에 것을 볼 수 있습니다 :
내가 사용
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: {} }
. init 메소드는 그 자체로 매우 간단하고 포함
@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 컨테이너에 제대로 저장되어 반환 될 수 때까지 init 메소드를 호출하여 기다릴 필요가 있다는 것입니다. 하지만 :(이. 누군가가 내가이 문제를 해결하는 방법을 나에게 설명 할 방법을 몰라?
파일 어 ich는 코드가 포함되어 있습니다 : https://github.com/sdudziak/js-app-kickstarter/blob/master/src/server/bootstrap.ts –