Использование кода идентификации MVC из настольного приложения - программирование

Использование кода идентификации MVC из настольного приложения

Я пытаюсь использовать код MVC Identity из настольного приложения. Настольное приложение должно вносить кучу дополнений и обновлений в мои пользовательские данные.

Я скопировал классы из сгенерированного приложения MVC, установил необходимые пакеты и внес все изменения, необходимые для компиляции кода.

Единственная проблема, которую я имею сейчас, - это создание экземпляра класса ApplicationUserManager.

public ApplicationUserManager UserManager
{
    get => _userManager ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
    private set
    {
        _userManager = value;
    }
}
private ApplicationUserManager _userManager;

Проблема в том, что у меня нет HttpContext, и поэтому HttpContext.Current всегда будет возвращать HttpContext.Current.

Возможно ли то, что я делаю? Как я могу создать UserManager из настольного приложения без HTTP-контекста?

ОБНОВИТЬ:

У меня есть прямой доступ к базе данных, поэтому я был бы счастлив с решением, которое не требует кода и классов Identity. Самым большим препятствием здесь будет создание и обновление паролей, чтобы их можно было "понять" с помощью кода Identity в моем приложении на веб-сайте.

4b9b3361

Ответ 1

интересный подход,

в противном случае необходимо будет очистить все, что касается httpcontext.

Вы можете создать экземпляр ApplicationUserManager следующим образом.

public ApplicationUserManager UserManager
{
    get
    { 
        if(_userManager == null)
        {
            _userManager =  new ApplicationUserManager(new Microsoft.AspNet.Identity.EntityFramework.UserStore<ApplicationUser>(yourDbContext));
        }
        return _userManager;
    }
}

Ответ 2

Вы можете сделать так:

var context = ApplicationDbContext.Create();
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
//change password
var result = userManager.ChangePasswordAsync("userId", "oldPwd", "newPwd");