applyInjections.ts
Назначение файла
Модуль предоставляет функцию applyInjections(), которая адаптирует декларацию контроллера с зависимостями к фабрике, принимающей ditox-контейнер.
Общая информация
Эта утилита полезна при регистрации контроллеров в контейнере или при ручной интеграции с DI-конфигурацией. Она избавляет от необходимости каждый раз создавать ExtensionParamsProvider вручную.
Концептуальная архитектура
applyInjections() является тонкой оберткой:
- Принимает
ControllerDeclaration, чей контекст уже предполагает наличиеdeps. - Возвращает функцию
(container) => service. - Внутри создает экземпляр контроллера через
new controller([...providers]), передавая provider, сформированныйprovideDependencyContainer(container).
Описание публичного API
applyInjections<TContext, TService>(controller): (container: Container) => TService
controller: декларация контроллера или view-model, использующая dependency injections.- Возвращает фабрику, которая принимает
ditox-контейнер и создает сервис.
Примеры использования
ts
import { applyInjections, withInjections } from '@nrgyjs/ditox';
import { declareController } from '@nrgyjs/core';
import { createContainer, token } from 'ditox';
const LOGGER = token<(message: string) => void>();
const Controller = declareController()
.extend(withInjections({ log: LOGGER }))
.apply(({ deps }) => ({
write: () => deps.log('hello'),
}));
const container = createContainer();
container.bindValue(LOGGER, (message) => {
console.log(message);
});
const controller = applyInjections(Controller)(container);
controller.write();
controller.destroy();