import { Provider } from './Providers/Provider'; import { Class } from './Providers/ClassProvider'; interface Cached { value: T; owner: Injector; } export declare enum InjectFlags { Default = 0, Optional = 1, SkipSelf = 2, Self = 4 } export declare class Injector { parent: Injector; /** * Associates an identifying token with each provider */ protected providers: Map>; /** * In order to avoid going up the injectors' tree, cache */ protected providersCache?: Map>>; /** * Some dependencies can be cached and don't need to be resolved all the time */ protected cache?: Map>; readonly mutable: boolean; constructor(providers?: (Class | Provider)[], parent?: Injector); protected add(provider: Class | Provider): void; get(token: any, flags?: InjectFlags): T; create(constructor: Class, args?: any[], flags?: InjectFlags): T; createChild(providers: (Class | Provider)[]): Injector; } export declare class MutableInjector extends Injector { readonly mutable: boolean; add(provider: Class | Provider): void; set(token: any, provider: Class): void; } export {};