.Net Core 2.1 – Cannot access a disposed object.Object name: 'IServiceProvider'

  • A+
Category:Languages

I just migrated .NET Core 2.0 to .NET Core 2.1. Everything went fine, but when I try to login now I get the folowing error:

  • $exception {System.ObjectDisposedException: Cannot access a disposed object. Object name: 'IServiceProvider'.

This happens in this bit of code:

public class AppContractResolver : DefaultContractResolver {      private readonly IServiceProvider _services;      public AppContractResolver(IServiceProvider services)     {         _services = services;     }      protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)     {         var httpContextAccessor = _services.GetService<IHttpContextAccessor>();         var user = httpContextAccessor.HttpContext.User;          List<JsonProperty> properies = base.CreateProperties(type, memberSerialization).ToList();          properies = FilterOneClaimGranted(type, properies, user);          return properies;     } 

It happens on this line:

var httpContextAccessor = _services.GetService<IHttpContextAccessor>(); 

This did work on .NET Core 2.0

I have tried adding the HttpContextAccessor to my startup, but that did not work.

So, how do I fix this?

Let me know if you need more code. I will happily provide more, but I don't know what you might or might not need, so therefor I did not add a lot of code.'

EDIT

I have added services.AddHttpContextAccessor(); to my startup, but that does not seem to work. Still getting the error.

EDIT 2:

Full stacktrace:

- $exception    {System.ObjectDisposedException: Cannot access a disposed object. Object name: 'IServiceProvider'.    at Microsoft.Extensions.DependencyInjection.ServiceLookup.ThrowHelper.ThrowObjectDisposedException()    at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)    at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider)    at WebAPI.Extensions.AppContractResolver.CreateProperties(Type type, MemberSerialization memberSerialization) in C:/Users/luukw/Desktop/stage/blacky-api/Blacky/Extensions/Resolver/AppContractResolver.cs:line 25    at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(Type objectType)    at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(Type objectType)    at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)    at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(Type type)    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.GetContractSafe(Type type)    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)    at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)    at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)    at Microsoft.AspNetCore.Mvc.Formatters.JsonInputFormatter.ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)}    System.ObjectDisposedException 

  • 1

    just wanting to check, are you registering it in the .net core 2.1 way of calling services.AddHttpContextAccessor(); – Gibbon yesterday

  • I have tried adding it, but did not work. Still got the same error – Luuk Wuijster yesterday

  • Could you please provide the full stacktrace? – Matan Shahar yesterday

  • @MatanShahar Done. – Luuk Wuijster yesterday

  • Instead calling AddHttpContextAccessor try register it manually, helped in my case: services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>() – Vitaly yesterday