小编Joh*_*amm的帖子

如何在涉及异步调用的 ASP.NET Core 中初始化作用域注入类

我需要在 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)

c# dependency-injection asp.net-core

6
推荐指数
1
解决办法
1701
查看次数

标签 统计

asp.net-core ×1

c# ×1

dependency-injection ×1