InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[Project.Models.Account]' while attempting to activate 'Automobile.Server.Controllers.AuthController'.

5/31/2018 MVC
217

طبق مطلب قبلی در خصوص استفادهاز چند لایه برای پروژه ما قسمت مدیریت کاربر و یا همان ApplicationUser را در پروژه Model  پیاده سازی کردیم 

و پروژه اصلی که یک پروژه Mvc Core بود را به عناون پروژه اصلی استفاده کردیم 

مشکلی که داشتیم استفاده از قسمت ثبت نام و ورود بود

برای ثبت سرویس ثبت نام باید سرویس در قسمت سرویسها ثبت شده باشد 

            services.AddIdentity<ApplicationUser, IdentityRole>()
               .AddEntityFrameworkStores<SunPieContext>()
               .AddDefaultTokenProviders();

اما مشکلی که داشت و همانطور که در کد بالا میبینید ApplicationUser  به صورت پیش فرض از AppliccationUser موجود در پروژه MVC استفاده کند نه از ApplicationUser تعریف شده در پروژه Model  

برای تعریف و یک پارچه گی ما کلاس Applicationuser را از پروژه MVC  حذف کریدم migration موجود در پروژه را پاک کردیم و کد بالا را به این صورت تغییر دادیم 

            services.AddIdentity<Model.ApplicationUser, IdentityRole>()
               .AddEntityFrameworkStores<SunPieContext>()
               .AddDefaultTokenProviders();

در کد بالا پروژه Model  به قبل از applicationUser اضافه شده است .

حال اگر برنامه را اجرا کنید به این خطا برخورد میکنید 

InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[Project.Models.Account]' while attempting to activate 'Automobile.Server.Controllers.AuthController'.

 برای رفع این موضوع کافیه تا با استفاده از Search ApplicationUser  موجود در پروژه را پیدا و با Model.Applicationuser جایگذین کنید

مانند LoginPartial_

ManageNav_

Login_

...

به این صورت 

@inject SignInManager<SunPie.Model.ApplicationUser> SignInManager