import { Disposable } from '@dandi/common'; import { InjectionScope, InjectionToken, InjectorContext, Provider, Registerable, RegistrationSource, ScopeRestriction } from '@dandi/core/types'; import { DandiResolverContext } from './dandi-resolver-context'; import { Repository, RepositoryEntry } from './repository'; export interface FindExecFnData { result: FindCacheEntry; injectorContext: DandiInjectorContext; } export declare type FindExecFn = (data: FindExecFnData) => TResult; export interface FindCacheEntry { context: DandiInjectorContext; entry: RepositoryEntry; } /** * A scope object containing references to the repository and perInjector contexts used to resolve an injection token to a * provider and access instances. */ export declare class DandiInjectorContext implements InjectorContext, Disposable { readonly parent: DandiInjectorContext; readonly scope: InjectionScope; readonly instanceId: string; protected readonly repository: Repository; protected readonly injectorSource: RegistrationSource; private readonly instanceRequests; private readonly findCache; constructor(parent: DandiInjectorContext, scope: InjectionScope, providers?: Registerable[]); find(token: InjectionToken): DandiResolverContext; find(token: InjectionToken, exec: FindExecFn): TResult; addInstance(provider: Provider, value: T): T; getInstance(provider: Provider): T; getInstanceRequest(provider: Provider): Promise; setInstanceRequest(provider: Provider, value: Promise): Promise; createChild(scope: InjectionScope, ...providers: Registerable[]): DandiInjectorContext; findInstanceContext(matchContext: InjectorContext, scopeRestriction?: ScopeRestriction): DandiInjectorContext; dispose(reason: string): Promise; protected withInstanceContext(provider: Provider, exec: (instanceContext: DandiInjectorContext) => TResult): TResult; protected registerInternal(registerable: Registerable[], source?: RegistrationSource): this; protected doFind(token: InjectionToken, entryContext: InjectorContext): FindCacheEntry; private isSkipped; protected cachedFind(token: InjectionToken, entryContext: InjectorContext): FindCacheEntry; } //# sourceMappingURL=dandi-injector-context.d.ts.map