你能使用asp.net core DI将当前用户传递给dbcontext吗?

问题描述 投票:0回答:1

我目前正在使用DI作为我的上下文,如下所示。

services.AddTransient<APDatabase.DBContext>(provider =>
{
    return new APDatabase.DBContext();
});

是否可以将当前登录的用户传递给此用户?我目前在控制器中获得如下用户。

public NavigationController(APDatabase.DBContext context, IHttpContextAccessor httpContextAccessor)
{
    this._context = context;
    this._currentUser = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
}

然后我可以将其设置为每个控制器的contsructor中的上下文属性。这是我目前唯一可以看到这样做的方法,但如果可能的话,我更愿意让DI为我处理。

c# asp.net-core asp.net-identity
1个回答
0
投票

首先,您应该使用DI来通过DBContext而不是services.AddDbContext<ApplicationDbContext>注册return new APDatabase.DBContext();

按照以下步骤:

  1. 的DbContext: public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { private HttpContext _httpContext; public string CurrentUser => _httpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value; public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, IHttpContextAccessor httpContextAccessor) : base(options) { _httpContext = httpContextAccessor.HttpContext; } }
  2. 注册DbContext services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection")));
  3. 用例 qazxsw poi
© www.soinside.com 2019 - 2024. All rights reserved.