diff --git a/core/src/container.ts b/core/src/container.ts index 9e4d5c91..3a46eb37 100644 --- a/core/src/container.ts +++ b/core/src/container.ts @@ -69,7 +69,8 @@ export class Container implem } } - public async resolve( + public async resolveInContext( + context: ResolverContext, token: InjectionToken, optional: boolean = false, ...repositories: Repository[] @@ -82,19 +83,29 @@ export class Container implem throw new MissingTokenError(); } - const context = ResolverContext.create(token, null, ...this.repositories, ...repositories); + const resolveContext = context + ? context.childContext(token, null, ...this.repositories, ...repositories) + : ResolverContext.create(token, null, ...this.repositories, ...repositories); try { - const result = await this.resolveInternal(token, optional, context); + const result = await this.resolveInternal(token, optional, resolveContext); if (!result) { return null; } - return context.resolveValue(result); + return resolveContext.resolveValue(result); } catch (err) { - context.dispose(`Container error during resolve(): ${err.message}`); + resolveContext.dispose(`Container error during resolve(): ${err.message}`); throw err; } } + public resolve( + token: InjectionToken, + optional: boolean = false, + ...repositories: Repository[] + ): Promise> { + return this.resolveInContext(null, token, optional, ...repositories); + } + public invoke(instance: any, member: Function, ...repositories: Repository[]): Promise { return this.invokeInContext(null, instance, member, ...repositories); } diff --git a/core/src/resolver.ts b/core/src/resolver.ts index 0c449995..017e1428 100644 --- a/core/src/resolver.ts +++ b/core/src/resolver.ts @@ -15,6 +15,13 @@ export interface Resolver { ): Promise; resolve(token: InjectionToken, optional?: boolean, ...repositories: Repository[]): Promise>; + + resolveInContext( + context: ResolverContext, + token: InjectionToken, + optional?: boolean, + ...repositories: Repository[] + ): Promise>; } export const Resolver = localOpinionatedToken('Resolver', {