分开的控制器中的ASP.NET Core userManager和上下文

时间:2018-11-01 09:58:19

标签: c# asp.net-core

我只想为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;
    }
}

1 个答案:

答案 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;
    }
}