Получить менеджер пользователя в расширенном классе - PullRequest
1 голос
/ 21 марта 2020

Я перевожу свой ASP. net MVC проект на базовую версию. У меня есть класс расширения с методом, который возвращает имя пользователя по идентификатору пользователя (Guid).

public static class IdentityHelpers
{
    public static MvcHtmlString GetUserName(this HtmlHelper html, string id)
    {
        var manager = HttpContext.Current
            .GetOwinContext().GetUserManager<AppUserManager>();

        return new MvcHtmlString(manager.FindByIdAsync(id).Result.UserName);
    }
}

Поскольку я переписываю это в. NET Core, я не знаю, как получить пользователя Диспетчер здесь. Обычно я просто вставляю это через DI, но я не знаю, что делать, поскольку я использую метод расширения, поэтому я не могу внедрить его.

Как я могу получить UserManager в состоянии c класс?

1 Ответ

1 голос
/ 21 марта 2020

В новой версии все изменилось. Получите доступ к текущему HttpContext через HtmlHelper.ViewContext, и оттуда вы сможете получить доступ к IServiceProvider, который можно использовать для разрешения служб.

public static class IdentityHelpers {
    public static MvcHtmlString GetUserName(this HtmlHelper html, string id) {
        HttpContext context = html.ViewContext.HttpContext;
        IServiceProvider services = context.RequestServices;
        var manager = services.GetService<AppUserManager>();

        return new MvcHtmlString(manager.FindByIdAsync(id).Result.UserName);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...