Using ASP.NET Core 3.0 Preview 5, I'm trying to access HttpContextAccessor from inside an AppState class that I'm injecting into my application.
Unfortunately I keep getting a System.AggregateException with a message of
''Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: [MyNameSpace].AppState Lifetime: Singleton ImplementationType: [MyNameSpace].AppState': Unable to resolve service for type 'Microsoft.AspNetCore.Http.HttpContextAccessor' while attempting to activate '[MyNameSpace].AppState'.)'
My Startup.cs file is as follows:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddHttpContextAccessor();
services.AddSingleton<AppState>();
// More services
}
and my AppState.cs file is as follows:
private HttpContextAccessor _httpContextAccessor;
public AppState(HttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
I've checked online and it seems that just adding the AddHttpContextAccessor and AddSingleton<T> to my ConfigureServices method should do the trick but for some reason it isn't working.
As I'm pretty new to ASP.NET Core and Dependency Injection, I just wanted to see if someone who knows what they are doing has any idea what I'm doing wrong!
The AddHttpContextAccessor() method registers the service as a IHttpContextAccessor (note the I prefix to denote it is an interface) and that is what your class needs to explicitly accept in it's constructor:
private IHttpContextAccessor _httpContextAccessor;
public AppState(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
However, you should not be using this from a singleton class. HTTP requests are, unsurprisingly different per request.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With