На этой странице

@zirion/ioc · API-справочник

API-справочник

API @zirion/ioc v3: Container, настройки providers, синхронное и асинхронное разрешение, scopes, lifecycle-контракты и экспортируемые типы.

Обновлено · ·

new Container(options?)

Создаёт пустой контейнер.

const container = new Container({ logger });

options.logger может быть объектом ILogger, классом или фабрикой без аргументов. Если его не передать, используется ConsoleLoggerImpl.

container.add(selector, options?)

Регистрирует один provider и возвращает контейнер. Тип контейнера в TypeScript пополняется новым selector.

container.add(Service, {
  inject: [DependencyA, DependencyB],
  scope: InjectScope.TRANSIENT,
  valueFactory: async ([a, b], context) => new Service(a, b),
});
Опция По умолчанию Назначение
inject undefined Selectors, которые нужно получить перед созданием значения, в порядке аргументов
scope InjectScope.TRANSIENT Новое значение, общее для контейнера или связанное с context
valueFactory undefined Функция создания значения; может быть асинхронной

Класс можно создать без фабрики. Для других selectors нужен valueFactory.

container.get(selector, context?)

Возвращает промис со значением или null, если selector неизвестен. При другой ошибке промис отклоняется.

container.getOrFail(selector, context?)

Возвращает промис со значением. Неизвестный selector вызывает DependencyInjectionError с кодом UNKNOWN_TARGET.

container.getSync(selector, context?)

Возвращает значение синхронно или null, если регистрации нет во время выполнения. Бросает ASYNC_RESOLUTION_REQUIRED, если разрешению нужен промис.

container.getOrFailSync(selector, context?)

Возвращает значение синхронно. Отсутствие регистрации вызывает UNKNOWN_TARGET; асинхронная работа вызывает ASYNC_RESOLUTION_REQUIRED.

container.finalize() / container.build()

Вызывает и ожидает onFinalized() у объектов-селекторов и экземпляров singleton-классов, затем возвращает контейнер. build() вызывает finalize(). Request и transient-классы пропускаются; ресурсы не закрываются.

container.logger

Логгер, переданный при создании контейнера.

InjectScope

enum InjectScope {
  SINGLETON = 'singleton',
  REQUEST = 'request',
  TRANSIENT = 'transient',
}

Lifecycle-контракты

interface IOnInitialized {
  onInitialized(): void | Promise<void>;
}

interface IOnFinalized {
  onFinalized(): void | Promise<void>;
}

Другие экспортируемые типы

Пакет также экспортирует Type, MaybePromise, TSelector, TValueFactory, TTargetOptions, TStorageEntry, TContainerOptions, ILogFunction, TRegistration, TRegisteredValue, TFactoryResult, TResolutionCache и ILogger. В прикладном коде чаще всего нужны TTargetOptions и ILogger; типы хранилища относятся в основном к внутреннему устройству.

Наверх