@@ -460,13 +460,13 @@ func (sp *serviceProvider) Close() error {
460460
461461// addBuiltInServices adds built-in services.
462462func (sp * serviceProvider ) addBuiltInServices () error {
463+ // Register ServiceProvider (existing code)
463464 if err := sp .digContainer .Provide (func () ServiceProvider {
464465 return sp .rootScope
465466 }); err != nil {
466467 return fmt .Errorf ("failed to register ServiceProvider: %w" , err )
467468 }
468469
469- // Also add these to our descriptor tracking for IsService checks
470470 spDesc := & serviceDescriptor {
471471 ServiceType : reflect .TypeOf ((* ServiceProvider )(nil )).Elem (),
472472 Lifetime : Singleton ,
@@ -477,6 +477,28 @@ func (sp *serviceProvider) addBuiltInServices() error {
477477 sp .descriptors = append (sp .descriptors , spDesc )
478478 sp .descriptorIndex [spDesc .ServiceType ] = []* serviceDescriptor {spDesc }
479479
480+ // Add context.Context as a scoped service
481+ ctxDesc := & serviceDescriptor {
482+ ServiceType : reflect .TypeOf ((* context .Context )(nil )).Elem (),
483+ Lifetime : Scoped , // Important: must be scoped
484+ Constructor : func () context.Context {
485+ return context .Background () // Default, will be overridden in scope
486+ },
487+ }
488+ sp .descriptors = append (sp .descriptors , ctxDesc )
489+ sp .descriptorIndex [ctxDesc .ServiceType ] = []* serviceDescriptor {ctxDesc }
490+
491+ // Add Scope as a scoped service
492+ scopeDesc := & serviceDescriptor {
493+ ServiceType : reflect .TypeOf ((* Scope )(nil )).Elem (),
494+ Lifetime : Scoped ,
495+ Constructor : func () Scope {
496+ return sp .rootScope // Default, will be overridden in scope
497+ },
498+ }
499+ sp .descriptors = append (sp .descriptors , scopeDesc )
500+ sp .descriptorIndex [scopeDesc .ServiceType ] = []* serviceDescriptor {scopeDesc }
501+
480502 return nil
481503}
482504
0 commit comments