【问题标题】:Get user manager at extension class在扩展类中获取用户管理器
【发布时间】:2020-07-02 12:36:17
【问题描述】:

我正在将我的 ASP.net MVC 项目迁移到核心版本。我有一个带有方法的扩展类,它通过用户 ID(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# asp.net-core .net-core asp.net-identity


    【解决方案1】:

    新版本发生了一些变化。通过HtmlHelper.ViewContext 访问当前的HttpContext,从那里您应该能够访问可用于解析服务的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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      相关资源
      最近更新 更多