UNPKG

ts-ioc-container

Version:
54 lines (53 loc) 2.16 kB
import { type IProvider, ProviderOptions } from '../provider/IProvider'; import { type constructor } from '../utils'; import { type IRegistration } from '../registration/IRegistration'; export type Tag = string; export type DependencyKey = string | symbol; export type InjectionToken<T = unknown> = constructor<T> | DependencyKey; type WithChild = { child: Tagged; }; export type ResolveOneOptions = ProviderOptions & Partial<WithChild>; type WithExcludedKeys = { excludedKeys: Set<DependencyKey>; }; export type ResolveManyOptions = ResolveOneOptions & Partial<WithExcludedKeys>; export interface Resolvable { resolve<T>(key: InjectionToken<T>, options?: ResolveOneOptions): T; } export interface IContainerModule { applyTo(container: IContainer): void; } export interface Tagged { hasTag(tag: Tag): boolean; } type WithTags = { tags: Tag[]; }; export type CreateScopeOptions = Partial<WithTags>; export interface Instance<T = unknown> { new (...args: unknown[]): T; } export type RegisterOptions = { aliases?: DependencyKey[]; }; export interface IContainer extends Tagged { readonly isDisposed: boolean; register(key: DependencyKey, value: IProvider, options?: RegisterOptions): this; addRegistration(registration: IRegistration): this; getRegistrations(): IRegistration[]; resolveClass<T>(target: constructor<T>, options?: ProviderOptions): T; resolveOne<T>(alias: constructor<T> | DependencyKey, options?: ResolveOneOptions): T; resolveOneByKey<T>(key: DependencyKey, options?: ResolveOneOptions): T; resolveOneByAlias<T>(key: DependencyKey, options?: ResolveOneOptions): T; resolveMany<T>(alias: DependencyKey, options?: ResolveManyOptions): T[]; createScope(options?: CreateScopeOptions): IContainer; getScopes(): IContainer[]; removeScope(child: IContainer): void; useModule(module: IContainerModule): this; getParent(): IContainer | undefined; getInstances(): Instance[]; dispose(): void; } export declare const DEFAULT_CONTAINER_RESOLVER: <T>(scope: IContainer, keyOrAlias: constructor<T> | DependencyKey, options?: ResolveOneOptions) => T; export {};