ASP.NET Core userManager和上下文位于分离的控制器中



我只想为userManager和dbcontext创建单独的控制器。我想从此控制器继承。我不想使用构造函数注入依赖项,因为这样我就必须将构造函数也添加到另一个控制器中。还有别的办法吗?

private UserManager<ApplicationUser> _userManager;
private ApplicationDbContext _context;
ApplicationDbContext Context
{
get
{
if(this._context == null)
{
// GET CONTEXT <= HOW TO DO THIS?
}
return this._context;
}
}
UserManager<ApplicationUser> UserManager
{
get
{
if(this._userManager == null)
{
// GET USER MANAGER <= HOW TO DO THIS?
}
return this._userManager;
}
}

如果您完全反对使用依赖注入,您可以使用Service Locator模式,但我建议您不要使用它,因为Service Locator是一种反模式。

如果仍然不想使用依赖注入,可以使用HttpContext.RequestServices访问IServiceProvider实例,并使用其GetRequiredService方法请求您想要的类型,如下所示:

ApplicationDbContext Context
{
get
{
if (this._context == null)
{
this._context = HttpContext.RequestServices.GetRequiredService<ApplicationDbContext>();
}
return this._context;
}
}
UserManager<ApplicationUser> UserManager
{
get
{
if (this._userManager == null)
{
this._userManager = HttpContext.RequestServices.GetRequiredService<UserManager<ApplicationUser>>();
}
return this._userManager;
}
}

最新更新