У меня есть класс, который получает промежуточный текущий пользователь, вошедший в приложение из базы данных для текущего запроса:ASP.NET 5 DI Регистрация От Middleware
public class CurrentUserMiddleware
{
RequestDelegate m_next;
UserManager<User> m_userManager;
public CurrentUserMiddleware(RequestDelegate next, UserManager<User> userManager)
{
m_next = next;
m_userManager = userManager;
}
public async Task Invoke(HttpContext context)
{
var userId = context.User.Identity.GetUserId();
var user = await m_userManager.FindByIdAsync(userId);
var currentUserContext = new CurrentUserContext { User = user };
// Register CurrentUserContext with DI to this currentUserContext instance
await m_next(context);
}
}
После этого будет решена, я хочу, чтобы зарегистрировать CurrentUserContext
которые могут быть разрешены в других областях моего приложения через DI.
Например:
public class HomeController : Controller
{
private readonly CurrentUserContext m_currentUserContext;
public HomeController(CurrentUserContext currentUserContext)
{
m_currentUserContext = currentUserContext;
}
public async Task<IActionResult> Index()
{
var userName = m_currentUserContext.User.Username;
return View();
}
}
Как правильно зарегистрировать CurrentUserContext
? Все остальные записи DI выполняются в Startup
ConfigureServices
, однако это не работает для этого случая, так как мне нужно разрешить CurrentUserContext
по каждому запросу.
Спасибо за подсказку. Я смог решить свою проблему с вашим предложением «заводского» стиля, переместив «CurrentUserContext» в свойство, зарегистрированное в контейнере DI в «ConfigureServices», а затем разрешен в промежуточном программном обеспечении. – kspearrin