Gewusst wie: hinzufügen IHttpContextAccessor in der Startup-Klasse der DI in ASP.NET Core 1.0?
In ASP.NET Core RC 1 ich verwendete den folgenden code zum abrufen des Werts der Kontext (vollständige Adresse auf der Seite). Dann habe ich Sie aufgenommen dieser Wert in der Konfiguration.
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();
});
}
}
Nun machte ich mich um das Projekt zu aktualisieren auf ASP.NET Core 1.0. Aber beim Start der Seite erhalte ich die folgende Fehlermeldung:
System.InvalidOperationException Nicht beheben service für geben
'Microsoft.AspNetCore.Http.IHttpContextAccessor' beim Versuch
aktivieren Sie " MyProject.Start".in
Microsoft.Extensions.Intern.ConstructorMatcher.CreateInstance(IServiceProvider
provider) bei
Microsoft.Extensions.Intern.ActivatorUtilities.CreateInstance(IServiceProvider
Anbieter Geben instanceType, Object[] parameters) bei
Microsoft.Extensions.Intern.ActivatorUtilities.GetServiceOrCreateInstance(IServiceProvider
Anbieter, Type Type) bei
Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetServiceOrCreateInstance(IServiceProvider
Anbieter, Type Type) bei
Microsoft.AspNetCore.Hosting.Intern.StartupLoader.LoadMethods(IServiceProvider
services, Geben Sie über den startuptype, string environmentName) bei
Microsoft.AspNetCore.Hosting.<>c__DisplayClass1_0.b__1(IServiceProvider
sp) an
Microsoft.Extensions.DependencyInjection.ServiceLookup.FactoryService.Invoke(ServiceProvider
provider) bei
Microsoft.Extensions.DependencyInjection.ScopedCallSite.Invoke(ServiceProvider
provider) bei
Microsoft.Extensions.DependencyInjection.SingletonCallSite.Invoke(ServiceProvider
provider) bei
Microsoft.Extensions.DependencyInjection.<>c__DisplayClass12_0.b__0(ServiceProvider
provider) bei
Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type
Diensttyp) bei
Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider
Anbieter Geben Diensttyp) bei
Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider
provider) bei
Microsoft.AspNetCore.Hosting.Intern.WebHost.EnsureStartup() bei
Microsoft.AspNetCore.Hosting.Intern.WebHost.EnsureApplicationServices()
bei Microsoft.AspNetCore.Hosting.Intern.WebHost.BuildApplication().NET Framework X64 v4.0.30319.42000 | Microsoft.AspNetCore.Hosting
version 1.0.0-rtm-21431 | Microsoft Windows 6.1.7601 S
Wie bekomme ich die neue version IHttpContextAccessor beim starten der Anwendung?
- Wenn Sie einen Blick auf die aktuellen änderungen für .Net Core ist, können Sie sehen, dass
IHttpContextAccessor
ist nicht mehr standardmäßig eingetragen. github.com/aspnet/Hosting/issues/793 - Vielen Dank für den link.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht mehr ein Standard-service. Sie haben, um Sie zu konfigurieren starten.cs
UPDATE: In ASP.NET Core 2.1, die
AddHttpContextAccessor
helper extension-Methode wurde Hinzugefügt, um korrekt zu registrieren, dieIHttpContextAccessor
mit dem richtigen Leben (singleton). So, in ASP.NET Core 2.1 und höher, sollte der code seinQuelle: https://github.com/aspnet/Hosting/issues/793
Startap.cs
nicht mein problem lösen, weilIHttpContextAccessor
verwendet werden muss im Konstruktor der Klasse. Also ich habe eine Abhängigkeit in derProgram.cs
AddTransient
da sein wird für eine Anfrage?.AddIdentity()
bietet bereits die Registrierung github.com/aspnet/Hosting/issues/793#issuecomment-224831136