import FactoryProvider from "../providers/factory-provider"; import InjectionToken from "../providers/injection-token"; import TokenProvider from "../providers/token-provider"; import ValueProvider from "../providers/value-provider"; import ClassProvider from "../providers/class-provider"; import constructor from "./constructor"; import RegistrationOptions from "./registration-options"; import Disposable from "./disposable"; import InterceptorOptions from "./interceptor-options"; export declare type ResolutionType = "Single" | "All"; export interface PreResolutionInterceptorCallback { /** * @param token The InjectionToken that was intercepted * @param resolutionType The type of resolve that was called (i.e. All or Single) */ (token: InjectionToken, resolutionType: ResolutionType): void; } export interface PostResolutionInterceptorCallback { /** * @param token The InjectionToken that was intercepted * @param result The object that was resolved from the container * @param resolutionType The type of resolve that was called (i.e. All or Single) */ (token: InjectionToken, result: T | T[], resolutionType: ResolutionType): void; } export default interface DependencyContainer extends Disposable { register(token: InjectionToken, provider: ValueProvider): DependencyContainer; register(token: InjectionToken, provider: FactoryProvider): DependencyContainer; register(token: InjectionToken, provider: TokenProvider, options?: RegistrationOptions): DependencyContainer; register(token: InjectionToken, provider: ClassProvider, options?: RegistrationOptions): DependencyContainer; register(token: InjectionToken, provider: constructor, options?: RegistrationOptions): DependencyContainer; registerSingleton(from: InjectionToken, to: InjectionToken): DependencyContainer; registerSingleton(token: constructor): DependencyContainer; registerType(from: InjectionToken, to: InjectionToken): DependencyContainer; registerInstance(token: InjectionToken, instance: T): DependencyContainer; /** * Resolve a token into an instance * * @param token The dependency token * @return An instance of the dependency */ resolve(token: InjectionToken): T; resolveAll(token: InjectionToken): T[]; /** * Check if the given dependency is registered * * @param token The token to check * @param recursive Should parent containers be checked? * @return Whether or not the token is registered */ isRegistered(token: InjectionToken, recursive?: boolean): boolean; /** * Clears all registered tokens */ reset(): void; clearInstances(): void; createChildContainer(): DependencyContainer; /** * Registers a callback that is called when a specific injection token is resolved * @param token The token to intercept * @param callback The callback that is called before the token is resolved * @param options Options for under what circumstances the callback will be called */ beforeResolution(token: InjectionToken, callback: PreResolutionInterceptorCallback, options?: InterceptorOptions): void; /** * Registers a callback that is called after a successful resolution of the token * @param token The token to intercept * @param callback The callback that is called after the token is resolved * @param options Options for under what circumstances the callback will be called */ afterResolution(token: InjectionToken, callback: PostResolutionInterceptorCallback, options?: InterceptorOptions): void; /** * Calls `.dispose()` on all disposable instances created by the container. * After calling this, the container may no longer be used. */ dispose(): Promise | void; }