Я создаю библиотеку в TypeScript, которая использует систему впрыска зависимостей (inversifyJS), чтобы самостоятельно построить и разрешить зависимости. Проблема у меня есть - я хочу выставить несколько экземпляров из системы впрыска потребителям библиотеки.Как экспортировать несколько экземпляров объектов в TypeScript?
В настоящее время, что я пытаюсь сделать, это:
import kernel from "./src/inversify.config";
import EntityManager from './src/manager/entityManager.service';
import StorageService from './src/storage/storage.service';
import LanguageService from './src/language/language.service';
export { kernel.get<EntityManager>(EntityManager) as EntityManagerInstance };
export { kernel.get<EntityManager>(LanguageService) as LanguageServiceInstance };
export { kernel.get<EntityManager>(StorageService) as StorageServiceInstance };
Решение, которое я вижу, это возможно, чтобы использовать фасад экспортировать типы и доступ к ним позже:
import EntityManager from './src/manager/entityManager.service';
import StorageService from './src/storage/storage.service';
import LanguageService from './src/language/language.service';
import InjectionFacade from './utils/injection.facede';
export { EntityManager, LanguageService, StorageService, InjectiorFacade };
// Usage:
// import {InjectionFacade, StorageService} from 'entity-manager';
// let injectionFacade: InjectionFacade = InjectionFacade.createAndResolve();
// let storageService: StorageService = injectionFacade.getStorageService();
Но проблема с этим я имею еще одну бесполезную абстракцию
Есть ли способ реализовать такое решение без потери определений типов и экспорта готовых к использованию объектов?
Спасибо - это то, что я хочу (лучше или хуже) –
Примечание стороны: Вызов 'kernel.get' много раз является показателем возможного [анти-паттерна] (HTTP: // блог. ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/) 'kernel.get' следует использовать только один раз в вашем [корневом составе] (http://blog.ploeh.dk/2011/07/28/CompositionRoot/) –