MediatR - обработка текущего пользователя в запросе - PullRequest
0 голосов
/ 23 октября 2018

Как лучше всего моделировать текущего пользователя в запросе?Я создаю страницу бритвенного приложения.Мне нужно иметь возможность подключить текущего пользователя, когда я выполняю запросы и команды.Есть ли рекомендуемый подход для этого?

1 Ответ

0 голосов
/ 23 октября 2018

Приведенный ниже подход хорошо работает для меня, поскольку у меня есть возможность получить пользователя в сервисный уровень, от которого зависят мои проекты Razor.

Согласно руководству Дэвида Фаулера здесь , ясоздал класс UserAccessor следующим образом:

public class UserAccessor : IUserAccessor
{
    private readonly IHttpContextAccessor _accessor;

    public UserAccessor(IHttpContextAccessor accessor)
    {
        _accessor = accessor ?? throw new ArgumentNullException(nameof(accessor));
    }

    public ClaimsPrincipal User => _accessor.HttpContext.User;
}

, который я регистрирую в своем проекте Razor при запуске, вызывая

services.AddTransient<IUserAccessor, UserAccessor>()

, а затем внедряю это в обработчики MediatR и мой DbContext кака также некоторые фабрики по мере необходимости.

private readonly IUserAccessor _userAccessor;

public EventLogFactory(IUserAccessor userAccessor)
{
    _userAccessor = userAccessor ?? throw new ArgumentNullException(nameof(userAccessor));
} 

IHttpContextAccessor, на который ссылается UserAccessor, требует Microsoft.AspNetCore.Http.Abstractions nuget в проектах, которые не ссылаются на Microsoft.AspNetCore.App метапакет и также потребует, чтобы ваш проект Razor также реализовывал AddHttpContextAccessor() при запуске:

// Register IHttpContextAccessor for services to get access to the HttpContext.  
services.AddHttpContextAccessor();

Надеюсь, это поможет.

...