طبق مطلب قبلی در خصوص استفادهاز چند لایه برای پروژه ما قسمت مدیریت کاربر و یا همان 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