Этот интерфейс следует использовать с осторожностью. Он опирается на AsyncLocal, что может отрицательно сказаться на производительности асинхронных вызовов. Это также создает зависимость от «окружающего состояния», что может затруднить тестирование.
Я думаю, кто-то собирается мне сказать, что внедрение пользовательской информации это запах кода, и мне следует стиснуть зубы и передать его от контроллера? Или вместо этого я могу что-то сделать в промежуточном программном обеспечении?
Обновление:
Код: Выделить всё
public class CurrentUserNameProvider : ICurrentUserNameProvider
{
private readonly IHttpContextAccessor _httpContextAccessor;
public CurrentUserNameProvider(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
///
/// Get name of current user.
///
///
public string GetCurrentUserName()
{
var user = _httpContextAccessor.HttpContext?.User;
return user.Identity.Name;
}
}
Джеймс
Подробнее здесь: https://stackoverflow.com/questions/785 ... a-di-servi