@@ -82,6 +82,11 @@ export class InstanceWrapper<T = any> {
82
82
| undefined ;
83
83
private isTreeStatic : boolean | undefined ;
84
84
private isTreeDurable : boolean | undefined ;
85
+ /**
86
+ * The root inquirer reference. Present only if child instance wrapper
87
+ * is transient and has a parent inquirer.
88
+ */
89
+ private rootInquirer : InstanceWrapper | undefined ;
85
90
86
91
constructor (
87
92
metadata : Partial < InstanceWrapper < T > > & Partial < InstancePerContext < T > > = { } ,
@@ -405,15 +410,28 @@ export class InstanceWrapper<T = any> {
405
410
const isInquirerRequestScoped =
406
411
inquirer && ! inquirer . isDependencyTreeStatic ( ) ;
407
412
const isStaticTransient = this . isTransient && ! isInquirerRequestScoped ;
408
-
413
+ const rootInquirer = inquirer ?. getRootInquirer ( ) ;
409
414
return (
410
415
this . isDependencyTreeStatic ( ) &&
411
416
contextId === STATIC_CONTEXT &&
412
417
( ! this . isTransient ||
413
- ( isStaticTransient && ! ! inquirer && ! inquirer . isTransient ) )
418
+ ( isStaticTransient && ! ! inquirer && ! inquirer . isTransient ) ||
419
+ ( isStaticTransient && ! ! rootInquirer && ! rootInquirer . isTransient ) )
414
420
) ;
415
421
}
416
422
423
+ public attachRootInquirer ( inquirer : InstanceWrapper ) {
424
+ if ( ! this . isTransient ) {
425
+ // Only attach root inquirer if the instance wrapper is transient
426
+ return ;
427
+ }
428
+ this . rootInquirer = inquirer . getRootInquirer ( ) ?? inquirer ;
429
+ }
430
+
431
+ getRootInquirer ( ) : InstanceWrapper | undefined {
432
+ return this . rootInquirer ;
433
+ }
434
+
417
435
public getStaticTransientInstances ( ) {
418
436
if ( ! this . transientMap ) {
419
437
return [ ] ;
0 commit comments