Справочник API
Эта страница кратко описывает публичный API core. Точные generic definitions смотрите в README пакета и TypeScript declarations.
Container
import {
Container,
type ContainerOptions,
type DependenciesMap,
type Lazy,
type LazySpec,
type Module,
type RegistrationKind,
type Spec,
type SpecMap,
} from '@inferdi/inferdi'class Container<T extends DependenciesMap = Record<never, never>> {
constructor(options?: ContainerOptions)
registerClass(key, Ctor, deps, kind?, lazyKey?)
registerFactory(key, factory, kind?, lazyKey?)
registerValue(key, value)
override(key, value)
use(fn)
createScope()
get(key)
has(key)
get disposed(): boolean
dispose(): Promise<void>
[Symbol.dispose](): void
[Symbol.asyncDispose](): Promise<void>
}Методы регистрации
| Метод | Назначение |
|---|---|
registerClass | Регистрирует конструктор и кортеж зависимостей. |
registerFactory | Регистрирует пользовательскую логику создания. |
registerValue | Регистрирует singleton-значение, которым владеет внешний код. |
override | Заменяет существующую регистрацию; отклоняет ключ, уже находящийся в локальном кеше. |
use | Применяет сборщик модуля. |
registerClass и registerFactory принимают виды времени жизни singleton, scoped и transient, а также опциональный companion lazyKey. registerValue всегда создаёт singleton, которым владеет внешний код.
Считайте кортеж зависимостей, переданный в registerClass, неизменяемым после регистрации. Оптимизированные пути создания экземпляра не делают защитную копию.
Проверка времени вызова override смотрит только в кеш текущего контейнера. Она обнаруживает локально закешированные singleton/scoped-значения, registerValue и повторные overrides, но не отслеживает transient-resolve и значения предка, разрешённые через дочерний контейнер. Применяйте overrides до разрешения графа зависимостей.
Типы namespace
namespace Container {
type Resolve<C>
type ResolveUnwrapped<C>
type UnwrappedValue<C, K>
type Providers<C>
}| Тип | Назначение |
|---|---|
Container.Resolve<C> | Извлекает плоскую карту { key: Value } из собранного контейнера. |
Container.ResolveUnwrapped<C> | Как Resolve, но разворачивает в T только управляемые записи-компаньоны LazySpec; обычные сервисы с методом .get() не меняются. |
Container.UnwrappedValue<C, K> | Находит один развёрнутый тип сервиса. |
Container.Providers<C> | Карта provider-thunks для тестов. |
Публичные типы
type Lazy<T> = { readonly get: () => T }
type RegistrationKind = 'singleton' | 'transient' | 'scoped'
interface ContainerOptions {
readonly strict?: boolean
}
interface Spec<V, K extends RegistrationKind = 'singleton'> {
readonly type: V
readonly kind: K
}
type SpecMap<M, K extends RegistrationKind = 'singleton'> = {
[P in keyof M]: Spec<M[P], K>
}
type Module<TIn extends DependenciesMap, TOut extends DependenciesMap> =
(c: Container<TIn>) => Container<TIn & TOut>Форма API адаптеров
Каждый адаптер экспортирует:
- функцию интеграции, например
inferdiFastify skipInferdiDisposeMaybePromise- структурные
InferdiScope,InferdiRoot,InferdiScopeOf - типы опций и helper types для конкретного фреймворка
Фреймворк-специфичные generics и детали жизненного цикла описаны на страницах адаптеров.
