我只想为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;
}
}
答案 0 :(得分:2)
如果您完全反对使用依赖注入,则可以使用服务定位器模式,但出于Service Locator is an Anti-Pattern中详细说明的原因,我建议您不要使用它。
如果您仍然不想使用依赖注入,则可以使用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;
}
}