Доступ к UserManager вне AccountController

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
27
задан unicorn2 5 April 2016 в 13:40
поделиться

1 ответ

Если вы используете шаблон проекта по умолчанию, UserManager создается следующим образом:

В файле Startup.Auth.cs есть такая строка:

app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

, который заставляет конвейер OWIN создавать экземпляр экземпляра ApplicationUserManager каждый раз, когда запрос поступает на сервер. Вы можете получить этот экземпляр из конвейера OWIN, используя следующий код внутри контроллера:

Request.GetOwinContext().GetUserManager<ApplicationUserManager>()

Если вы внимательно посмотрите на свой класс AccountController, вы увидите следующие фрагменты кода, которые делают доступ к ApplicationUserManager возможно:

    private ApplicationUserManager _userManager;

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

Обратите внимание, что в случае, когда вам нужно создать экземпляр класса ApplicationUserManager, вам нужно использовать статический метод ApplicationUserManager.Create, чтобы у вас были применены соответствующие настройки и конфигурация к нему.

30
ответ дан Iravanchi 5 April 2016 в 13:40
поделиться
Другие вопросы по тегам:

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