@@ -25,6 +25,7 @@ import {
2525 PropertyMetadata ,
2626} from './instance-wrapper' ;
2727import { Module } from './module' ;
28+ import { INQUIRER } from './inquirer' ;
2829
2930/**
3031 * The type of an injectable dependency
@@ -217,6 +218,7 @@ export class Injector {
217218 callback ,
218219 contextId ,
219220 wrapper ,
221+ inquirer ,
220222 ) ;
221223 }
222224
@@ -227,11 +229,17 @@ export class Injector {
227229 callback : ( args : any [ ] ) => void ,
228230 contextId = STATIC_CONTEXT ,
229231 inquirer ?: InstanceWrapper ,
232+ parentInquirer ?: InstanceWrapper ,
230233 ) {
231234 const inquirerId = this . getInquirerId ( inquirer ) ;
232235 const metadata = wrapper . getCtorMetadata ( ) ;
233236 if ( metadata && contextId !== STATIC_CONTEXT ) {
234- const deps = await this . loadCtorMetadata ( metadata , contextId , inquirer ) ;
237+ const deps = await this . loadCtorMetadata (
238+ metadata ,
239+ contextId ,
240+ inquirer ,
241+ parentInquirer ,
242+ ) ;
235243 return callback ( deps ) ;
236244 }
237245 const dependencies = isNil ( inject )
@@ -244,6 +252,10 @@ export class Injector {
244252 let isResolved = true ;
245253 const resolveParam = async ( param , index ) => {
246254 try {
255+ if ( param === INQUIRER && parentInquirer ) {
256+ return parentInquirer . instance ;
257+ }
258+
247259 const paramWrapper = await this . resolveSingleParam < T > (
248260 wrapper ,
249261 param ,
@@ -638,10 +650,16 @@ export class Injector {
638650 metadata : InstanceWrapper < any > [ ] ,
639651 contextId : ContextId ,
640652 inquirer ?: InstanceWrapper ,
653+ parentInquirer ?: InstanceWrapper ,
641654 ) : Promise < any [ ] > {
642655 const hosts = await Promise . all (
643656 metadata . map ( async item =>
644- this . resolveComponentHost ( item . host , item , contextId , inquirer ) ,
657+ this . resolveScopedComponentHost (
658+ item ,
659+ contextId ,
660+ inquirer ,
661+ parentInquirer ,
662+ ) ,
645663 ) ,
646664 ) ;
647665 const inquirerId = this . getInquirerId ( inquirer ) ;
@@ -677,4 +695,16 @@ export class Injector {
677695 private getInquirerId ( inquirer : InstanceWrapper | undefined ) : string {
678696 return inquirer && inquirer . id ;
679697 }
698+
699+ private resolveScopedComponentHost (
700+ item : InstanceWrapper ,
701+ contextId : ContextId ,
702+ inquirer ?: InstanceWrapper ,
703+ parentInquirer ?: InstanceWrapper ,
704+ ) {
705+ if ( item . isTransient && item . name === INQUIRER && parentInquirer ) {
706+ return parentInquirer ;
707+ }
708+ return this . resolveComponentHost ( item . host , item , contextId , inquirer ) ;
709+ }
680710}
0 commit comments