Пакет @nrgyjs/ditox
Назначение пакета
Пакет @nrgyjs/ditox интегрирует декларации контроллеров Nrgy.js с DI-контейнером ditox.
Общая информация
Пакет добавляет extensions, которые делают контейнер ditox доступным внутри контроллеров и view-model. Также он предоставляет helper для адаптации контроллеров с injections к конфигурации DI.
Установка пакета
bash
npm install @nrgyjs/core @nrgyjs/ditox ditoxbash
yarn add @nrgyjs/core @nrgyjs/ditox ditoxbash
pnpm add @nrgyjs/core @nrgyjs/ditox ditoxКонцептуальная архитектура
Пакет намеренно небольшой и целиком построен на extension-механизме из @nrgyjs/core.
withContainer()добавляет активныйditox-контейнер в контекст контроллера.withInjections()резолвит карту токенов из контейнера и публикует результат какdepsв контексте контроллера.applyInjections()адаптирует декларацию контроллера к функции, удобной для использования в DI-конфигурации.
Документация по функционалу
- applyInjections: адаптер из декларации контроллера в container-aware фабрику.
- withContainer: extension для передачи
ditox-контейнера. - withInjections: extension для резолва токенов в
deps.
Примеры использования
ts
import { declareController } from '@nrgyjs/core';
import { withInjections } from '@nrgyjs/ditox';
import { token } from 'ditox';
const LOGGER = token<(message: string) => void>();
const LoggerController = declareController()
.extend(withInjections({ log: LOGGER }))
.apply(({ deps }) => ({
write: (message: string) => deps.log(message),
}));