Comment ajouter IHttpContextAccessor dans le Démarrage de classe dans la DI ASP.NET Core 1.0?
Dans ASP.NET Core RC 1 j'ai utilisé le code suivant pour récupérer la valeur de contexte (adresse complète de la page). Puis j'ai enregistré cette valeur dans la 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();
});
}
}
Maintenant que j'ai commencé à mettre à jour le projet sur ASP.NET Core 1.0. Mais lors du lancement du site, j'obtiens l'erreur suivante:
Système.InvalidOperationException parvenez pas à résoudre pour le type de service
"Microsoft.AspNetCore.Http.IHttpContextAccessor' lors de la tentative de
activer " MyProject.Démarrage'.à
Microsoft.Extensions.Interne.ConstructorMatcher.CreateInstance(IServiceProvider
fournisseur) à
Microsoft.Extensions.Interne.ActivatorUtilities.CreateInstance(IServiceProvider
fournisseur, Type de type d'instance, Object[] paramètres) à
Microsoft.Extensions.Interne.ActivatorUtilities.GetServiceOrCreateInstance(IServiceProvider
fournisseur, Type Type) à
Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetServiceOrCreateInstance(IServiceProvider
fournisseur, Type Type) à
Microsoft.AspNetCore.De l'hébergement.Interne.StartupLoader.LoadMethods(IServiceProvider
des services, du Type de démarrage du Type, string environmentName) à
Microsoft.AspNetCore.De l'hébergement.<>c__DisplayClass1_0.b__1(IServiceProvider
sp) au
Microsoft.Extensions.DependencyInjection.ServiceLookup.FactoryService.Invoke(ServiceProvider
fournisseur) à
Microsoft.Extensions.DependencyInjection.ScopedCallSite.Invoke(ServiceProvider
fournisseur) à
Microsoft.Extensions.DependencyInjection.SingletonCallSite.Invoke(ServiceProvider
fournisseur) à
Microsoft.Extensions.DependencyInjection.<>c__DisplayClass12_0.b__0(ServiceProvider
fournisseur) à
Microsoft.Extensions.DependencyInjection.Fournisseur de services.La Méthode GetService(Type
serviceType) à
Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider
fournisseur, Type de serviceType) à
Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider
fournisseur) à
Microsoft.AspNetCore.De l'hébergement.Interne.Hébergeur.EnsureStartup() à
Microsoft.AspNetCore.De l'hébergement.Interne.Hébergeur.EnsureApplicationServices()
chez Microsoft.AspNetCore.De l'hébergement.Interne.Hébergeur.BuildApplication().NET Framework X64 v4.0.30319.42000 | Microsoft.AspNetCore.Hébergement
version 1.0.0-rtm-21431 | Microsoft Windows 6.1.7601 S
Comment puis-je obtenir la nouvelle version IHttpContextAccessor au démarrage de l'application?
IHttpContextAccessor
n'est plus homologué par défaut. github.com/aspnet/Hosting/issues/793Merci beaucoup pour le lien.
OriginalL'auteur Kolya_Net | 2016-07-04
Vous devez vous connecter pour publier un commentaire.
Il n'est plus un service par défaut. Vous devez le configurer dans le Démarrage.cs
Mise à JOUR: ASP.NET de Base 2.1, le
AddHttpContextAccessor
helper extension de la méthode a été ajouté à inscrire correctement lesIHttpContextAccessor
avec la bonne durée de vie (singleton). Donc, dans ASP.NET de Base 2.1 et au-dessus, le code doit êtreSource: https://github.com/aspnet/Hosting/issues/793
L'ajout de dépendances
Startap.cs
ne résout pas mon problème parce queIHttpContextAccessor
doit être utilisé dans le constructeur de la classe. J'ai donc ajouté une dépendance dans leProgram.cs
une question ne devrait-ce pas être
AddTransient
parce que sa sera pour une demande?Avez-vous jamais obtenir une réponse à cela? Devrait-il être singleton ou transitoire?
J'ai utilisé Singleton. voici plus d'infos sur ce github.com/aspnet/Hosting/issues/793 lire la réponse par davidfowl
OriginalL'auteur Sasha Fentsyk