【发布时间】:2016-11-06 04:16:21
【问题描述】:
在 ASP.NET Core RC 1 中,我使用以下代码检索上下文的值(页面的完整地址)。然后我在配置中记录了这个值。
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();
});
}
}
现在我开始在 ASP.NET Core 1.0 上更新项目。但在网站启动期间,我收到以下错误:
System.InvalidOperationException 无法解析类型的服务 'Microsoft.AspNetCore.Http.IHttpContextAccessor' 尝试 激活“MyProject.Startup”。
在 Microsoft.Extensions.Internal.ConstructorMatcher.CreateInstance(IServiceProvider 提供者)在 Microsoft.Extensions.Internal.ActivatorUtilities.CreateInstance(IServiceProvider 提供者,类型 instanceType,Object[] 参数)在 Microsoft.Extensions.Internal.ActivatorUtilities.GetServiceOrCreateInstance(IServiceProvider 提供者,类型类型)在 Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetServiceOrCreateInstance(IServiceProvider 提供者,类型类型)在 Microsoft.AspNetCore.Hosting.Internal.StartupLoader.LoadMethods(IServiceProvider 服务,类型 startupType,字符串 environmentName)在 Microsoft.AspNetCore.Hosting.c__DisplayClass1_0.b__1(IServiceProvider sp) 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.FactoryService.Invoke(ServiceProvider 提供者)在 Microsoft.Extensions.DependencyInjection.ScopedCallSite.Invoke(ServiceProvider 提供者)在 Microsoft.Extensions.DependencyInjection.SingletonCallSite.Invoke(ServiceProvider 提供者)在 Microsoft.Extensions.DependencyInjection.c__DisplayClass12_0.b__0(ServiceProvider 提供者)在 Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(类型 服务类型)在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider 提供者,类型 serviceType) 在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider 提供者)在 Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureStartup() 在 Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices() 在 Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
.NET Framework X64 v4.0.30319.42000 | Microsoft.AspNetCore.Hosting 版本 1.0.0-rtm-21431 |微软视窗 6.1.7601 S
应用启动时如何获取新版本的IHttpContextAccessor?
【问题讨论】:
-
如果您查看 .Net Core 的重大更改,您会发现默认情况下不再注册
IHttpContextAccessor。 github.com/aspnet/Hosting/issues/793
标签: c# asp.net-core asp.net-core-mvc asp.net-core-1.0