@zirion/ioc · API-справочник
API-справочник
API @zirion/ioc v3: Container, настройки providers, синхронное и асинхронное разрешение, scopes, lifecycle-контракты и экспортируемые типы.
Обновлено · · if-else.dev
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; типы хранилища относятся в основном к внутреннему устройству.