2016-10-12 5 views
1

Я создаю библиотеку в 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(); 

Но проблема с этим я имею еще одну бесполезную абстракцию

Есть ли способ реализовать такое решение без потери определений типов и экспорта готовых к использованию объектов?

ответ

2

Вы хотите использовать переменную с несколькими объявлениями, например.

export const 
    EntityManagerInstance = kernel.get<EntityManager>(EntityManager), 
    LanguageServiceInstance = kernel.get<EntityManager>(LanguageService), 
    StorageServiceInstance = kernel.get<EntityManager>(StorageService); 
+0

Спасибо - это то, что я хочу (лучше или хуже) –

+0

Примечание стороны: Вызов 'kernel.get' много раз является показателем возможного [анти-паттерна] (HTTP: // блог. ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/) 'kernel.get' следует использовать только один раз в вашем [корневом составе] (http://blog.ploeh.dk/2011/07/28/CompositionRoot/) –

Смежные вопросы