我需要在 ASP.NET Core 的范围级别初始化一个注入类 - 初始化涉及异步方法调用。您不会在构造函数中执行此操作,也不会在属性访问器中执行此操作。
asp.net 核心应用程序中常见的 DI 使用是获取当前用户。我通过创建一个IUserContext抽象并在作用域级别注入它来实现这一点:
public sealed class AspNetUserContext : IUserContext
{
private readonly UserManager<User> userManager;
private readonly IHttpContextAccessor accessor;
private User currentUser;
public AspNetUserContext(IHttpContextAccessor a, UserManager<User> userManager) {
accessor = a;
if (userManager == null)
throw new ArgumentNullException("userManager");
this.userManager = userManager;
}
public string Name => accessor.HttpContext.User?.Identity?.Name;
public int Id => accessor.CurrentUserId();
public User CurrentUser {
get {
if (currentUser == null) {
currentUser = this.UserManager.FindByIdAsync(Id.ToString()).ConfigureAwait(false).GetAwaiter().GetResult();
}
return currentUser;
}
}
} …Run Code Online (Sandbox Code Playgroud)