![](/img/trans.png)
[英]Adding DI to DbContext with Base implementation asp.net core 2.0
[英]Can you pass current user into dbcontext using asp.net core DI
我目前正在使用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为我处理。
首先,您应该使用DI通过services.AddDbContext<ApplicationDbContext>
注册DBContext
,而不是return new APDatabase.DBContext();
。
按照以下步骤:
的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; } }
注册DbContext
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection")));
用例
public class HomeController : Controller { private readonly ApplicationDbContext _appDbContext; public HomeController(ApplicationDbContext applicationDbContext) { _appDbContext = applicationDbContext; } public async Task<IActionResult> Index() { var user = _appDbContext.CurrentUser; return View(); } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.