/** * DI контейнер для библиотеки * * Используется для внедрения зависимостей в stores и другие компоненты. */ import type { AnyConstructor, Constructor } from "../types"; /** * Токен для внедрения зависимостей. * Используется для регистрации и получения значений из DI контейнера. * * @example * ```ts * const SUBSCRIPTION = new InjectionToken('Subscription'); * diContainer.registerToken(SUBSCRIPTION, subscription); * const sub = diContainer.getToken(SUBSCRIPTION); * ``` */ export declare class InjectionToken { readonly options?: { /** Фабрика для создания значения по умолчанию */ factory?: () => T; } | undefined; /** Уникальный символ для идентификации токена */ readonly symbol: symbol; constructor(description: string, options?: { factory?: () => T; } | undefined); } /** * Интерфейс DI контейнера */ export interface IDIContainer { resolve(token: AnyConstructor): T; resolveOptional(token: AnyConstructor): T | undefined; replace(token: AnyConstructor, ClassConstructor: Constructor): void; /** Получить значение по токену */ getToken(token: InjectionToken): T; /** Зарегистрировать значение для токена */ registerToken(token: InjectionToken, value: T): void; /** Зарегистрировать фабрику для токена */ registerFactory(token: InjectionToken, factory: () => T): void; /** Проверить наличие токена */ hasToken(token: InjectionToken): boolean; /** Зарегистрировать функцию очистки (вызывается при clear) */ registerCleanup(cleanup: () => void): void; /** Очистить контейнер */ clear(): void; }