我正在将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);
}
}
当我把它重写到.NETCore时,我不知道如何在这里获得用户管理器实例。通常我只会通过DI注入,但我不知道该怎么办,因为我正在使用扩展方法,所以我不能注入它
如何在静态类中获取UserManager
?
新版本中的情况发生了变化。通过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);
}
}