ts-ioc-container
Version:
Typescript IoC container
55 lines (54 loc) • 2.14 kB
TypeScript
import { type IProvider } from '../provider/IProvider';
import { type constructor } from '../utils';
import { type IRegistration } from '../registration/IRegistration';
export type Tag = string;
export type DependencyKey = string | symbol;
export declare function isDependencyKey(token: unknown): token is DependencyKey;
export type InjectionToken<T = unknown> = constructor<T> | DependencyKey;
export type ResolveOneOptions = {
args?: unknown[];
child?: Tagged;
lazy?: boolean;
};
export type ResolveManyOptions = ResolveOneOptions & {
excludedKeys?: Set<DependencyKey>;
};
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;
}
export type CreateScopeOptions = {
tags?: Tag[];
};
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[];
resolveByClass<T>(target: constructor<T>, options?: {
args?: unknown[];
}): T;
resolveOne<T>(alias: constructor<T> | DependencyKey, options?: ResolveManyOptions): 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;