То, что вы пытаетесь сделать здесь, не имеет смысла.Во-первых, вы не можете ввести HtmlHelper
, а во-вторых, вы не можете полагаться на введенное значение из статического метода.Статический метод вызывается для класса, а не для экземпляра, а попытка использовать ивару доступна только для экземпляра экземпляра класса.
Вероятно, вам будет лучше обслуживать расширение.Например, вы можете сделать что-то вроде:
public static class HtmlHelperExtensions
{
public static IIdentity GetUserId(this HtmlHelper helper)
{
var userIdentity = helper.ViewContext.HttpContext.User.Identity;
return userIdentity;
}
}
Тогда:
@Html.GetUserId()
В качестве альтернативы, вы хотите добавить IHttpContextAccessor
в UserHelper
, на самом деле введите UserHelper
, чтобы получить экземпляр, а затем используйте нестатический метод GetUserId
:
public class UserHelper
{
private readonly IHttpContextAccessor _httpContextAccessor;
public UserHelper(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public IIdentity GetUserId()
{
var userIdentity = _httpContextAccessor.HttpContext?.User.Identity;
return userIdentity;
}
}
Затем в своем приложении ConfigureServices
:
services.AddHttpContextAccessor();
services.AddSingleton<UserHelper>();
В таких местах, как классы контроллеров, вы вводите UserHelper
, как и все остальное.В представлениях вы можете использовать:
@inject Namespace.To.UserHelper UserHelper