question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Crash on page reload (Pressing F5) in ASP.Net.Core 2.2 while using Unity container

See original GitHub issue

Describe the bug

Calling disposed service provider on refresh.

While using Unity as a Service Provider, loading a page the first time runs fine but on refresh, hitting F5, this exception is thrown.

To Reproduce

Steps to reproduce the behavior:

  1. Create new ASP.Net.Core 2.2 app
  2. Add Unity provider as suggested here. Reference Unity.Microsoft.DependencyInjection v5.10.0 because I’ve disabled Dispose method in latest as a temporary workaround for the issue.
  3. Run
  4. Hit F5

This example reproduces the behavior. It was working fine with previous releases.

Additional context

The instance of service provider is released by this line

The stack at the moment of Dispose call:

Unity.Microsoft.DependencyInjection.dll!Unity.Microsoft.DependencyInjection.ServiceProvider.Dispose() Line 78	C#
Microsoft.AspNetCore.Hosting.dll!Microsoft.AspNetCore.Hosting.Internal.RequestServicesFeature.Dispose() Line 51	C#
Microsoft.AspNetCore.Http.Abstractions.dll!Microsoft.AspNetCore.Http.HttpResponse..cctor.AnonymousMethod__30_1(object disposable) Line 19	C#
Microsoft.AspNetCore.Server.IIS.dll!Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.FireOnCompleted() Line 448	C#
Microsoft.AspNetCore.Server.IIS.dll!Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT<Microsoft.AspNetCore.Hosting.Internal.HostingApplication.Context>.ProcessRequestAsync() Line 58	C#
Microsoft.AspNetCore.Server.IIS.dll!Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer.HandleRequest(Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext context) Line 176	C#
Microsoft.AspNetCore.Server.IIS.dll!Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer.HandleRequest.AnonymousMethod__26_0(object state) Line 160	C#
System.Private.CoreLib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state)	Unknown
System.Private.CoreLib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch()	Unknown

the offending call to disposed ServiceProvider is coming from here. The stack at the moment of call as follows:

Unity.Microsoft.DependencyInjection.dll!Unity.Microsoft.DependencyInjection.ServiceProvider.GetService(System.Type serviceType) Line 31	C#
Microsoft.Extensions.DependencyInjection.Abstractions.dll!Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(System.IServiceProvider provider, System.Type serviceType) Line 56	C#
Microsoft.Extensions.DependencyInjection.Abstractions.dll!Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService<Microsoft.AspNetCore.Routing.IEndpointAddressScheme<Microsoft.AspNetCore.Routing.RouteValuesAddress>>(System.IServiceProvider provider) Line 79	C#
Microsoft.AspNetCore.Routing.dll!Microsoft.AspNetCore.Routing.DefaultLinkGenerator.GetEndpoints<Microsoft.AspNetCore.Routing.RouteValuesAddress>(Microsoft.AspNetCore.Routing.RouteValuesAddress address) Line 196	C#
Microsoft.AspNetCore.Routing.dll!Microsoft.AspNetCore.Routing.DefaultLinkGenerator.GetPathByAddress<Microsoft.AspNetCore.Routing.RouteValuesAddress>(Microsoft.AspNetCore.Http.HttpContext httpContext, Microsoft.AspNetCore.Routing.RouteValuesAddress address, Microsoft.AspNetCore.Routing.RouteValueDictionary values, Microsoft.AspNetCore.Routing.RouteValueDictionary ambientValues, Microsoft.AspNetCore.Http.PathString? pathBase, Microsoft.AspNetCore.Http.FragmentString fragment, Microsoft.AspNetCore.Routing.LinkOptions options) Line 81	C#
Microsoft.AspNetCore.Routing.dll!Microsoft.AspNetCore.Routing.LinkGeneratorRouteValuesAddressExtensions.GetPathByRouteValues(Microsoft.AspNetCore.Routing.LinkGenerator generator, Microsoft.AspNetCore.Http.HttpContext httpContext, string routeName, object values, Microsoft.AspNetCore.Http.PathString? pathBase, Microsoft.AspNetCore.Http.FragmentString fragment, Microsoft.AspNetCore.Routing.LinkOptions options) Line 46	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Routing.EndpointRoutingUrlHelper.Action(Microsoft.AspNetCore.Mvc.Routing.UrlActionContext urlActionContext) Line 84	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.UrlHelperExtensions.Action(Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action, string controller, object values, string protocol, string host, string fragment) Line 215	C#
Microsoft.AspNetCore.Mvc.ViewFeatures.dll!Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateActionLink(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string linkText, string actionName, string controllerName, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes) Line 155	C#
Microsoft.AspNetCore.Mvc.TagHelpers.dll!Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Process(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) Line 280	C#
Microsoft.AspNetCore.Razor.dll!Microsoft.AspNetCore.Razor.TagHelpers.TagHelper.ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output) Line 56	C#
Microsoft.AspNetCore.Razor.Runtime.dll!Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.RunAsync(Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext executionContext) Line 43	C#
ASP.Net.Core.Unity.Example.Views.dll!AspNetCore.Views_Shared__Layout.ExecuteAsync.AnonymousMethod__44_1()	C#
Microsoft.AspNetCore.Razor.Runtime.dll!Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext.SetOutputContentAsync() Line 263	C#
ASP.Net.Core.Unity.Example.Views.dll!AspNetCore.Views_Shared__Layout.ExecuteAsync()	Unknown
System.Private.CoreLib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start<System.__Canon>(ref System.__Canon stateMachine)	Unknown
ASP.Net.Core.Unity.Example.Views.dll!AspNetCore.Views_Shared__Layout.ExecuteAsync()	Unknown
Microsoft.AspNetCore.Mvc.Razor.dll!Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(Microsoft.AspNetCore.Mvc.Razor.IRazorPage page, Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) Line 178	C#
Microsoft.AspNetCore.Mvc.Razor.dll!Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(Microsoft.AspNetCore.Mvc.Razor.IRazorPage page, Microsoft.AspNetCore.Mvc.Rendering.ViewContext context, bool invokeViewStarts) Line 157	C#
Microsoft.AspNetCore.Mvc.Razor.dll!Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderLayoutAsync(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context, Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ViewBufferTextWriter bodyWriter) Line 264	C#
Microsoft.AspNetCore.Mvc.Razor.dll!Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(Microsoft.AspNetCore.Mvc.Rendering.ViewContext context) Line 115	C#
Microsoft.AspNetCore.Mvc.ViewFeatures.dll!Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.Rendering.ViewContext viewContext, string contentType, int? statusCode) Line 247	C#
Microsoft.AspNetCore.Mvc.ViewFeatures.dll!Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext actionContext, Microsoft.AspNetCore.Mvc.ViewEngines.IView view, Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary viewData, Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionary tempData, string contentType, int? statusCode) Line 193	C#
Microsoft.AspNetCore.Mvc.ViewFeatures.dll!Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, Microsoft.AspNetCore.Mvc.ViewResult result) Line 171	C#
Microsoft.AspNetCore.Mvc.ViewFeatures.dll!Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) Line 67	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(Microsoft.AspNetCore.Mvc.IActionResult result) Line 138	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext<Microsoft.AspNetCore.Mvc.Filters.IResultFilter, Microsoft.AspNetCore.Mvc.Filters.IAsyncResultFilter>(ref Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.State next, ref Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Scope scope, ref object state, ref bool isCompleted) Line 1046	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsync<Microsoft.AspNetCore.Mvc.Filters.IResultFilter, Microsoft.AspNetCore.Mvc.Filters.IAsyncResultFilter>() Line 1092	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext<Microsoft.AspNetCore.Mvc.Filters.IResultFilter, Microsoft.AspNetCore.Mvc.Filters.IAsyncResultFilter>(ref Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.State next, ref Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Scope scope, ref object state, ref bool isCompleted) Line 984	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultFilters() Line 851	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.State next, ref Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Scope scope, ref object state, ref bool isCompleted) Line 709	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter() Line 793	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.State next, ref Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Scope scope, ref object state, ref bool isCompleted) Line 407	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync() Line 123	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() Line 81	C#
Microsoft.AspNetCore.Mvc.Core.dll!Microsoft.AspNetCore.Mvc.Internal.MvcEndpointDataSource.CreateEndpoint.AnonymousMethod__0(Microsoft.AspNetCore.Http.HttpContext context) Line 560	C#
Microsoft.AspNetCore.Routing.dll!Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext httpContext) Line 42	C#
Microsoft.AspNetCore.Routing.dll!Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext httpContext) Line 78	C#
Microsoft.AspNetCore.CookiePolicy.dll!Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext context) Line 43	C#
Microsoft.AspNetCore.StaticFiles.dll!Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext context) Line 139	C#
Microsoft.AspNetCore.Diagnostics.dll!Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext context)	Unknown
System.Private.CoreLib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start<Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__7>(ref Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__7 stateMachine)	Unknown
Microsoft.AspNetCore.Diagnostics.dll!Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext context)	Unknown
Microsoft.AspNetCore.HostFiltering.dll!Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext context) Line 81	C#
Microsoft.AspNetCore.Hosting.dll!Microsoft.AspNetCore.Hosting.Internal.RequestServicesContainerMiddleware.Invoke(Microsoft.AspNetCore.Http.HttpContext httpContext) Line 47	C#
Microsoft.AspNetCore.Hosting.dll!Microsoft.AspNetCore.Hosting.Internal.HostingApplication.ProcessRequestAsync(Microsoft.AspNetCore.Hosting.Internal.HostingApplication.Context context) Line 46	C#
Microsoft.AspNetCore.Server.IIS.dll!Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT<Microsoft.AspNetCore.Hosting.Internal.HostingApplication.Context>.ProcessRequestAsync() Line 34	C#
Microsoft.AspNetCore.Server.IIS.dll!Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer.HandleRequest(Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext context) Line 176	C#
Microsoft.AspNetCore.Server.IIS.dll!Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer.HandleRequest.AnonymousMethod__26_0(object state) Line 160	C#
System.Private.CoreLib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state)	Unknown
System.Private.CoreLib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch()	Unknown

Issue Analytics

  • State:closed
  • Created 4 years ago
  • Comments:11 (5 by maintainers)

github_iconTop GitHub Comments

5reactions
ENikScommented, Aug 26, 2019

Makes sense. Thank you!

I am driving from NY to LA at the moment. Will fix when I get to California

2reactions
davidfowlcommented, Aug 26, 2019

There’s a bug in the container implementation that causes this issue. Here’s the example. Even though Foo is a singleton, the service provider injected is from the first scope it’s resolved from. That’s a recipe for disaster. It’s possible this bug was always there (it needs to be fixed ASAP if that’s the case).

using System;
using Microsoft.Extensions.DependencyInjection;
using Unity;
using Unity.Microsoft.DependencyInjection;

namespace ASP.Net.Unity.Example
{
    public class Program
    {
        public class Foo
        {
            public Foo(IServiceProvider sp)
            {
                ServiceProvider = sp;
            }

            public IServiceProvider ServiceProvider { get; }
        }

        public static void Main(string[] args)
        {
            var container = new UnityContainer();
            var factory = new ServiceProviderFactory(container);
            var services = new ServiceCollection();
            services.AddSingleton<Foo>();
            var sp = factory.CreateServiceProvider(services);
            IServiceProvider scopedSp1 = null;
            IServiceProvider scopedSp2 = null;
            Foo foo1 = null;
            Foo foo2 = null;

            using (var scope1 = sp.CreateScope())
            {
                scopedSp1 = scope1.ServiceProvider;
                foo1 = scope1.ServiceProvider.GetRequiredService<Foo>();
            }

            using (var scope2 = sp.CreateScope())
            {
                scopedSp2 = scope2.ServiceProvider;
                foo2 = scope2.ServiceProvider.GetRequiredService<Foo>();
            }

            Console.WriteLine($"foo1.ServiceProvider == foo2.ServiceProvider = {foo1.ServiceProvider == foo2.ServiceProvider}");
            Console.WriteLine($"foo1.ServiceProvider == scopedSp1 = {foo1.ServiceProvider == scopedSp1}");
            Console.WriteLine($"foo2.ServiceProvider == scopedSp2 = {foo2.ServiceProvider == scopedSp2}");
        }
    }
}

UnityContainer:

foo1.ServiceProvider == foo2.ServiceProvider = True
foo1.ServiceProvider == scopedSp1 = True
foo2.ServiceProvider == scopedSp2 = False

DefaultContainer:

foo1.ServiceProvider == foo2.ServiceProvider = True
foo1.ServiceProvider == scopedSp1 = False
foo2.ServiceProvider == scopedSp2 = False

This should probably be part of our compat testing. I’ll make sure we add that case.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Resolved - Crash wether "reload domaing" happens
It updates the asset correctly but crashes afterwards because it triggers a domain reload. The crash is when "completing domain" stage appears.
Read more >
asp.net issue with F5 after postback, because it does what ...
I have a web form with a detail and a list view on it, the user fills the data in the fields of...
Read more >
Untitled
Le developpement durable ecologie, Anglophone west school district, Manitowoc accident 2 dead, Fox 2o15, Ascot 5 scooby doo, Diario la voz de bragado ......
Read more >
Untitled
Goodal mild protect fresh sun gel review, Calculus 1 with precalculus a one year ... Andy warhol illustrations 1950s, Asp net core logging...
Read more >
Untitled
A violent prosecutor download, Construction site accident lawyers queens. #health Mobile phone agreement family, Jonghyun shinee red carpet!
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found