Внедрение модуля SystemJS

Поиск лучших практик для реализации следующего сценария с использованием скрипта SystemJS и Type —

  1. AbstractLogger.d.ts — следует объявить (экспортировать) модуль с некоторыми классами.
  2. ConsoleLogger.ts — должен «реализовать» AbstractLogger.
  3. Consumer.ts — должен ссылаться на класс AbstractLogger и использовать его.

Все компилируется, но куда я должен внедрить ConsoleLogger в качестве текущей реализации AbstractLogger? В коде на стороне сервера этого легко добиться с помощью простого DI. Как это должно быть сделано здесь?

Пытался использовать System.config (карта: ...) безуспешно. Это правильный шаблон, или я что-то пропустил здесь?

Спасибо!


person Asaf    schedule 25.02.2016    source источник


Ответы (2)


В коде на стороне сервера этого легко добиться с помощью простого DI, как это должно быть сделано здесь

Загрузчик модуля ES6 не является DI. Можно подумать о создателе тегов script (упорядочение файлов) + revealing module pattern wrapper (предотвращение глобального загрязнения), если это поможет.

Для DI вам нужна библиотека DI. Например. его легко использовать Inversify с некоторым загрузчиком модулей (включая systemjs): в случае узла

person basarat    schedule 25.02.2016

Требуется библиотека DI — загрузчик модулей не является контейнером внедрения зависимостей.

Попробуйте контейнер внедрения зависимостей Aurelia. Это автономная библиотека без зависимостей, работает в браузере и в узле с поддержкой как TypeScript, так и JavaScript.

person Jeremy Danyow    schedule 26.02.2016