Использование ASP.NET Identity в трехуровневой архитектуре. Как изменить CookieAuthenticationProvider?

Использую трехуровневую архитектуру и ASP.NET Identity. Использовал гайд с metanit: metanit.com/sharp/mvc5/23.10.php
Проблема в том что я бы хотел в mvc проекте в Startup прописать в UseCookieAuthentication свой CookieAuthenticationProvider.
Provider = new CookieAuthenticationProvider
                {
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>
                    (TimeSpan.FromMinutes(30), async (manager, user) =>
                    {
                        var userIdentity = await manager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
                        //userIdentity.AddClaim(new Claim("FriendlyName", friendlyName));
                        //userIdentity.AddClaim(new Claim("balance", balance.ToString(CultureInfo.CurrentCulture)));
                        //userIdentity.AddClaim(new Claim("sms", sms.ToString()));
                        //userIdentity.AddClaim(new Claim("minutes", minutes.ToString()));
                        return userIdentity;
                    }, id => id.GetUserId<int>())
                }

Проблема в том что возникает ошибка CS0012 C# The type is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.AspNet.Identity.EntityFramework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.
Которую можно решить импортировав нужную либу но она за собой поттащит и EF. А как я понимаю EF не джолжно быть в PL. Как решить по другому эту задачу?
  • Вопрос задан
  • 818 просмотров
Решения вопроса 1
@dmitrievMV Автор вопроса
Пока решил вопрос по другому.
1) Перенес ApplicationRoleManager, ApplicationSignInManager, ApplicationUserManager из DAL в BLL где они по сути и должны были быть как я понимаю, при этом оставил UserStore и RoleStore в DAl в UnitOfWork.
2) Создал 2 статических метода в ApplicationSignInManager
public static Func<CookieValidateIdentityContext, Task> OnValidateIdentity()
        {
            return SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(TimeSpan.FromMinutes(30), GetIdentityAsync, id => id.GetUserId<int>());
        }

        public static async Task<ClaimsIdentity> GetIdentityAsync(ApplicationUserManager manager, ApplicationUser user)
        {
            var userIdentity = await manager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
            //userIdentity.AddClaim(new Claim("FriendlyName", friendlyName));
            //userIdentity.AddClaim(new Claim("balance", balance.ToString(CultureInfo.CurrentCulture)));
            //userIdentity.AddClaim(new Claim("sms", sms.ToString()));
            //userIdentity.AddClaim(new Claim("minutes", minutes.ToString()));
            return userIdentity;
        }

и подключил Owin библиотеки в BLL
3) в Startup в MVC ипользовал созданный метод
Provider = new CookieAuthenticationProvider
                {
                    OnValidateIdentity = ApplicationSignInManager.OnValidateIdentity()
                }


Таким образом в BLL появились либы для работы с OWIN а в PL не появился EF
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы