How to add IHttpContextAccessor to Startup class in DI in ASP.NET Core 1.0?

In ASP.NET Core RC 1, I used the following code to retrieve the context value (full page address). Then I wrote this value in the configuration.

public class Startup { public IConfigurationRoot Configuration { get; set; } private IHostingEnvironment CurrentEnvironment { get; set; } private IHttpContextAccessor HttpContextAccessor { get; set; } public Startup(IHostingEnvironment env, IHttpContextAccessor httpContextAccessor) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); if (env.IsDevelopment()) { builder.AddUserSecrets(); } builder.AddEnvironmentVariables(); Configuration = builder.Build(); CurrentEnvironment = env; HttpContextAccessor = httpContextAccessor; } public void ConfigureServices(IServiceCollection services) { ... services.AddOptions(); services.Configure<WebAppSettings>(configuration); services.Configure<WebAppSettings>(settings => { ... settings.WebRootPath = CurrentEnvironment.WebRootPath; settings.DomainUrl = HttpContextAccessor.HttpContext.Request.Host.ToUriComponent(); }); } } 

Now I started updating the project on ASP.NET Core 1.0. But during the launch of the site, I get the following error:

System.InvalidOperationException Unable to enable service for type "Microsoft.AspNetCore.Http.IHttpContextAccessor" when trying to activate "MyProject.Startup".

in Microsoft.Extensions.Internal.ConstructorMatcher.CreateInstance (IServiceProvider provider) in Microsoft.Extensions.Internal.ActivatorUtilities.CreateInstance (IServiceProvider provider, type instanceType, Object []) on Microsoft.Extensions.Internal.ActivatorEerviceTerviceUrviceUrviceUrviceUrviceUrviceUrviceUrviceUrviceUrviceUr type) in Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetServiceOrCreateInstance (IServiceProvider provider, type type) in Microsoft.AspNetCore.Hosting.Internal.StartupLoader.LoadMethods (IServiceProvider services, Type startupTypeHore.environmentNameHttp. stringType.Http. environmentTypeHore. String.Type.Heart.networkTypeHore. StringTypeHore. > C__DisplayClass1_0.b__1 (IServiceProvider sp) in Microsoft.Extensions.DependencyInjection.ServiceLookup.FactoryService.Invoke (ServiceProvider Provider) in Microsoft.Extensions.DependencyInjection.ScopedCallSite.Invoke (ServiceProvider Provider.Depen.Velect.Velect.Velet.Enter.Even.Velect.Even.Enter.Vect.Even.Enter.Even.Percept.Vecon.Provider.Plevener provider) in Microsoft.Extensions.DependencyInjection <. > C__DisplayClass12_0.b__0 (ServiceProvider Provider) in Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService (Type serviceType) with Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.ereterervicePeriderPervicePeriderPerviceProviderPervicePeriderPervicePeriderPervicePeriderPerviceProviderPerviceProviderPerviceProviderPervicePeriderProviderPervicePeriderPervicePeriderProviderPervicePeriderPervicePeriderPervicePeriderPervicePeriderPervicePeriderProviderPervicePeriderPervicePeriderPervicePeriderPervicePeriderPervicePeriderPervicePeriderProviderPerviceProviderPervicePeriderPervicePeriderProvider IServiceProvider provider) in Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureStartup () in Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices () in Microsoft.AspNetCore.Hosting.Internal.WebHost.Buildpp

.NET Framework X64 v4.0.30319.42000 | Microsoft.AspNetCore.Hosting version 1.0.0-rtm-21431 | Microsoft Windows 6.1.7601 S

How to get a new version of IHttpContextAccessor during application launch?

+7
c # asp.net-core asp.net-core-mvc
source share
1 answer

It is no longer the default service. You must configure it in Startup.cs

 services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>(); services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>(); 

UPDATE . ASP.NET Core 2.1 adds the AddHttpContextAccessor extension method to correctly register an IHttpContextAccessor with the correct singleton lifetime. So, in ASP.NET Core 2.1 and above, the code should be

 services.AddHttpContextAccessor(); services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>(); 

Source: https://github.com/aspnet/Hosting/issues/793

+17
source

All Articles