J'ai commencé à convertir mon projet principal asp.net RC1 en RC2 et j'ai rencontré un problème qui IHttpContextAccessor
ne s'est pas résolu.
Par souci de simplicité, j'ai créé un nouveau projet ASP.NET RC2 à l'aide du modèle Visual Studio ASP.NET Core Web Application (.Net Framework)
. Ensuite, j'ai ajouté un constructeur pour HomeController, modèle créé pour moi.
public HomeController(IHttpContextAccessor accessor)
{
}
Et après avoir lancé l'application, je reçois l'erreur suivante:
InvalidOperationException: impossible de résoudre le service pour le type «Microsoft.AspNetCore.Http.IHttpContextAccessor» lors de la tentative d'activation de «TestNewCore.Controllers.HomeController». Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
Dans ma vraie application, je dois résoudre IHttpContextAccessor
dans ma propre classe de service pour accéder à _contextAccessor.HttpContext.Authentication
et à _contextAccessor.HttpContext.User
. Everething fonctionne bien dans RC1. Alors, comment peut-il supposer être dans RC2?
Réponses:
IHttpContextAccessor n'est plus câblé par défaut, vous devez l'enregistrer vous-même
la source
services.AddScoped<IActionContextAccessor, ActionContextAccessor>()
Singleton
,Scoped
ouTransient
?Singleton
. github.com/aspnet/Hosting/issues/793InvalidOperationException: Cannot consume scoped service
. Une idée ?services.AddHttpContextAccessor()
qui est préférée / recommandée par Microsoft.À partir de .NET Core 2.1, une méthode d'extension a été ajoutée pour enregistrer correctement un en
IHttpContextAccessor
tant que singleton. Voir Ajouter un assistant pour enregistrer IHttpContextAccessor # 947 . Ajoutez simplement ce qui suit dans votreConfigureServices()
méthode:Cela équivaut à:
la source