Попытка собрать ядро ​​2.2 User Helper - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь создать помощник пользователя для ядра 2.2, чтобы упростить получение информации о текущих пользователях.

Я продолжаю возвращать ошибку ссылки на объект в этом текущем коде

private static HtmlHelper _helper;

    public UserHelper(HtmlHelper helper)
    {
        _helper = helper;
    }

    public static IIdentity GetUserId()
    {
       var userIdentity = _helper.ViewContext.HttpContext.User.Identity;

       return userIdentity;
    }

Я искал, и большинство решений работают только в контроллере или не работают вообще.Как я могу заставить это работать в классе?

1 Ответ

0 голосов
/ 08 июля 2019

То, что вы пытаетесь сделать здесь, не имеет смысла.Во-первых, вы не можете ввести 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...