Saya mulai mengubah proyek asp.net core RC1 saya ke RC2 dan dihadapkan dengan masalah yang sekarang IHttpContextAccessor
tidak terselesaikan.
Demi kesederhanaan, saya membuat proyek ASP.NET RC2 baru menggunakan Visual Studio Template ASP.NET Core Web Application (.Net Framework)
. Kemudian saya menambahkan konstruktor untuk HomeController yang template dibuat untuk saya.
public HomeController(IHttpContextAccessor accessor)
{
}
Dan setelah saya memulai aplikasi saya menerima kesalahan berikutnya:
InvalidOperationException: Tidak dapat menyelesaikan layanan untuk tipe 'Microsoft.AspNetCore.Http.IHttpContextAccessor' ketika mencoba mengaktifkan 'TestNewCore.Controllers.HomeController'. в Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider sp, Jenis tipe, Jenis yang diperlukan oleh, Boolean adalah DefaultParameter Diperlukan)
Dalam aplikasi asli saya, saya perlu menyelesaikan IHttpContextAccessor
di kelas layanan saya sendiri untuk mendapatkan akses ke _contextAccessor.HttpContext.Authentication
dan ke _contextAccessor.HttpContext.User
. Everething berfungsi dengan baik di RC1. Jadi bagaimana bisa di RC2?
Jawaban:
IHttpContextAccessor tidak lagi terhubung secara default, Anda harus mendaftarkannya sendiri
sumber
services.AddScoped<IActionContextAccessor, ActionContextAccessor>()
Singleton
,Scoped
atauTransient
?Singleton
. github.com/aspnet/Hosting/issues/793InvalidOperationException: Cannot consume scoped service
. Ada ide ?services.AddHttpContextAccessor()
yang disukai / direkomendasikan oleh Microsoft.Pada. NET Core 2.1 ada metode ekstensi yang telah ditambahkan untuk mendaftar dengan benar
IHttpContextAccessor
sebagai singleton. Lihat Menambahkan pembantu untuk mendaftar IHttpContextAccessor # 947 . Cukup tambahkan sebagai berikut dalamConfigureServices()
metode Anda :Ini setara dengan:
sumber