Skip to content

Stackoverflow even with Diagnostic extension enabled #360

Open

Description

@viceice

Description

I've a strange behavior.
I'm using a HttpTaskAsyncHandler (aspnet 4.7.2) where i resolve a service from my child container.
This works most of the time, but if i do some fast curl calls then it throws a StackOverflowException.
I thought this should be catched by the Diagnostic extension?

To Reproduce

I'm not sure how to reproduce, as it's not happening on every request.

Additional context

Using Unity v5.11

Activity

  1. viceice commented on Jul 20, 2023

    @viceice
    Author

    Is there a way to inject some logging to the resolve calls, so i can see whats going on?

  2. viceice commented on Jul 20, 2023

    @viceice
    Author

    Would be nice to get somewhere into this stack and log some diagnostics

     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Reflection.ParameterInfo parameter, object value)	Unknown
     	Unity.Container.dll!Unity.Processors.ParametersProcessor<System.Reflection.ConstructorInfo>.CreateDiagnosticParameterResolvers.AnonymousMethod__0(ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.Processors.ConstructorDiagnostic.GetResolverDelegate.AnonymousMethod__0(ref Unity.Builder.BuilderContext c)	Unknown
     	Unity.Container.dll!Unity.Processors.MemberProcessor<System.Reflection.FieldInfo, object>.GetResolver.AnonymousMethod__0(ref Unity.Builder.BuilderContext c)	Unknown
     	Unity.Container.dll!Unity.Processors.MemberProcessor<System.Reflection.PropertyInfo, object>.GetResolver.AnonymousMethod__0(ref Unity.Builder.BuilderContext c)	Unknown
     	Unity.Container.dll!Unity.Processors.MemberProcessor<System.Reflection.MethodInfo, object[]>.GetResolver.AnonymousMethod__0(ref Unity.Builder.BuilderContext c)	Unknown
     	Unity.Container.dll!Unity.Strategies.BuildPlanStrategy.PreBuildUp(ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.UnityContainer.ContextValidatingExecutePlan(Unity.Strategies.BuilderStrategy[] chain, ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Type type, string name, Unity.Registration.InternalRegistration registration)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Type type, string name)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Reflection.ParameterInfo parameter, object value)	Unknown
     	[The 10 frame(s) above this were repeated 328 times]	
     	Unity.Container.dll!Unity.Strategies.BuildPlanStrategy.PreBuildUp(ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.UnityContainer.ContextValidatingExecutePlan(Unity.Strategies.BuilderStrategy[] chain, ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Type type, string name, Unity.Registration.InternalRegistration registration)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Type type, string name)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Reflection.ParameterInfo parameter, object value)	Unknown
     	Unity.Container.dll!Unity.Processors.ParametersProcessor<System.Reflection.ConstructorInfo>.CreateDiagnosticParameterResolvers.AnonymousMethod__0(ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.Processors.ConstructorDiagnostic.GetResolverDelegate.AnonymousMethod__0(ref Unity.Builder.BuilderContext c)	Unknown
     	Unity.Container.dll!Unity.Processors.MemberProcessor<System.Reflection.FieldInfo, object>.GetResolver.AnonymousMethod__0(ref Unity.Builder.BuilderContext c)	Unknown
     	Unity.Container.dll!Unity.Processors.MemberProcessor<System.Reflection.PropertyInfo, object>.GetResolver.AnonymousMethod__0(ref Unity.Builder.BuilderContext c)	Unknown
     	Unity.Container.dll!Unity.Processors.MemberProcessor<System.Reflection.MethodInfo, object[]>.GetResolver.AnonymousMethod__0(ref Unity.Builder.BuilderContext c)	Unknown
     	Unity.Container.dll!Unity.Strategies.BuildPlanStrategy.PreBuildUp(ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.UnityContainer.ContextValidatingExecutePlan(Unity.Strategies.BuilderStrategy[] chain, ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Type type, string name, Unity.Registration.InternalRegistration registration)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Type type, string name)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Reflection.ParameterInfo parameter, object value)	Unknown
     	[Lightweight Function]	
     	Unity.Container.dll!Unity.Strategies.BuildPlanStrategy.PreBuildUp(ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.UnityContainer.ContextValidatingExecutePlan(Unity.Strategies.BuilderStrategy[] chain, ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Type type, string name, Unity.Registration.InternalRegistration registration)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Type type, string name)	Unknown
     	Unity.Container.dll!Unity.Builder.BuilderContext.Resolve(System.Reflection.PropertyInfo property, object value)	Unknown
     	[Lightweight Function]	
     	Unity.Container.dll!Unity.Strategies.BuildPlanStrategy.PreBuildUp(ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.UnityContainer.ExecuteValidatingPlan(ref Unity.Builder.BuilderContext context)	Unknown
     	Unity.Container.dll!Unity.UnityContainer.Unity.IUnityContainer.BuildUp(System.Type type, object existing, string name, Unity.Resolution.ResolverOverride[] overrides)	Unknown
     	Unity.Abstractions.dll!Unity.UnityContainerExtensions.BuildUp(Unity.IUnityContainer container, System.Type t, object existing, Unity.Resolution.ResolverOverride[] resolverOverrides)	Unknown
    
  3. ENikS commented on Jul 20, 2023

    @ENikS
    Contributor

    You have a cyclical dependency somewhere in your graph: > The 10 frame(s) above this were repeated 328 times

  4. viceice commented on Jul 20, 2023

    @viceice
    Author

    I know, but it's not happening all the time. 🤔

  5. ENikS commented on Jul 20, 2023

    @ENikS
    Contributor

    If you can make a strategy with a logger and plug it in, you could have all the diagnostics you want.

  6. viceice commented on Jul 20, 2023

    @viceice
    Author

    thanks, do you have some sample code?

    I'll try that tomorrow.

  7. ENikS commented on Jul 20, 2023

    @ENikS
    Contributor
  8. viceice commented on Jul 20, 2023

    @viceice
    Author

    OK, found it

    2023-07-20 21:44:45.5685|5|Debug|Project.Internal.Unity.CustomLifetimeStrategy:SharePoint - 80|PreBuildUp: type=Data declaringType=|
    2023-07-20 21:44:45.5685|5|Debug|Project.Internal.Unity.CustomLifetimeStrategy:SharePoint - 80|PreBuildUp: type=SpContext declaringType=Data|
    2023-07-20 21:44:45.5685|5|Debug|Project.Internal.Unity.CustomLifetimeStrategy:SharePoint - 80|PreBuildUp: type=Uri declaringType=SpContext|
    2023-07-20 21:44:45.5685|5|Debug|Project.Internal.Unity.CustomLifetimeStrategy:SharePoint - 80|PreBuildUp: type=Uri declaringType=Uri|
    2023-07-20 21:44:45.5685|5|Debug|Project.Internal.Unity.CustomLifetimeStrategy:SharePoint - 80|PreBuildUp: type=Uri declaringType=Uri|
    

    The SpContext class has two constructors a public and an internal and somehow unity sometimes picks the internal.
    The internal constructor uses the Uri as parameter. 😕

    I think the InjectionConstructor attribute will fix that, so only the public constructor is used.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions