-
Notifications
You must be signed in to change notification settings - Fork 9.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cannot access a disposed object - DI Service Provider #3076
Comments
Same here. @rr222cy did you get anywhere in the mean time? |
Me as well. @rr222cy have you solved this? |
Im having a the exact same problem. Who has solved this? |
used StructureMap.Microsoft.DependencyInjection and now all is working... |
I am having the same issue. @davidfowl Any ideas? |
Yes, the service provider is disposed in Configure since it's scoped. The pattern described in that blog post isn't good. You want to use a BackgroundService to do this long running background stuff. Here's what that looks like: The call to register the background service: https://github.com/davidfowl/UT3/blob/fb12e182d42d2a5a902c1979ea0e91b66fe60607/UTT/Startup.cs#L46 The background service implementation: https://github.com/davidfowl/UT3/blob/fb12e182d42d2a5a902c1979ea0e91b66fe60607/UTT/Scavenger.cs#L9 Docs here: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-2.1 /cc @guardrex can you update the docs with the new AddHostedService method plz 😄 |
My problem while sharing the exact same exception, is not SignalR related. This has been working for a few months already when running on 2.0, the moment after I updated to 2.1, it started failing. Is the IServiceProvider now registered differently at all? It would be super hard to create a repro, I am hoping that perhaps something here rings a bell, that you might be able to advise on. @davidfowl As always thanks for the speedy response, I am certain your response helped all the SignalR guys out :) |
@davidfowl Got it in for the Generic Host topic ( https://github.com/aspnet/Docs/blob/master/aspnetcore/fundamentals/host/hosted-services/samples/2.x/BackgroundTasksSample-GenericHost/Program.cs#L33-L44 ) but didn't make its way over to Web Host ... until now ... dotnet/AspNetCore.Docs#6901. |
|
Thanks David, greatly appreciated. 👏 |
Hi @davidfowl , We have a same problem. In our .net core 2.0 background service works fine. When we updated our .net core version to 2.1 system brought us the following error
We have the following code UPD: using app.ApplicationServices solved the problem, but I do not think that this is good workaround. Still waiting the undo of changes aspnet/Hosting#1106. Thanks |
When the changes get rolled back you won’t be able to use them until the next version anyways unless you’re using ci builds |
Thanks you @davidfowl , It would be great to understand when can we have the next patch versions of .net core 2.1? |
The next patch versions won’t have this fix. You won’t get anything related to this until at least August |
Thank you @guardrex and @davidfowl 👍 |
Closing this issue because the remaining work should be covered by https://github.com/aspnet/Hosting/issues/1446. |
If you have a transient service constructor that takes an IServiceProvider, the service provider will be disposed. This is a bug in .NET core. Work-around is to manage your own transient life-cycle in a pooling class. |
Can you open up a new bug with your specific issue with some sample code that reproduces the problem? Closed issues are rarely looked at... |
Hi all!
I've just started moving an application from ASP.NET Core 2.0, to Core 2.1. Everything went smooth and is working fine, except a quite important function that I had to disable for now to make the app run.
I use SignalR in this project, and have implemented a HeartBeat method, to keep the connection alive (running the app behind IIS). The solution I have implemented is following this thread on StackOverflow: https://stackoverflow.com/questions/47208844/net-core-signalr-connection-timeout-heartbeat-timer-connection-state-chan
This has been working great when running the app on .NET Core 2.0.x, but now throws the following error:
The part of the code throwing this error is as described above, the HeartBeat method, that looks like this
And is placed in Startup.cs under the
Configure()
method, TheserviceProvider
is injected with DI usingIServiceProvider serviceProvider
like thispublic void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
Has something changed in .NET Core 2.1 causing this?
The text was updated successfully, but these errors were encountered: