让 HomeController 继承自具有 session 属性的 BaseController

Syl*_*eth 2 c# model-view-controller asp.net-mvc asp.net-core

IHttpContextAccessor 给了我:

System.NullReferenceException:“未将对象引用设置为对象的实例。”

我的HomeController

public class HomeController : BaseController
{
    private static IHttpContextAccessor httpContextAccessor;
    private static seiren_devContext context;

    public HomeController() : base(httpContextAccessor,context)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

我的BaseController

public class BaseController : Controller
{
    protected readonly seiren_devContext _context;
    protected readonly IHttpContextAccessor _httpContextAccessor;
    protected ISession _session => _httpContextAccessor.HttpContext.Session;

    public BaseController(IHttpContextAccessor httpContextAccessor, seiren_devContext context)
    {
        _context = context;
        _httpContextAccessor = httpContextAccessor;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何让该类以正确的方式HomeController继承?BaseController

Dav*_*idG 6

没有任何东西设置static(注意:静态在这种情况下非常糟糕)变量,HomeController因此它们将始终为空。相反,让HomeController也将这两个值作为构造函数参数,并让依赖注入系统处理其余的事情。

public class HomeController : BaseController
{
    public HomeController(IHttpContextAccessor httpContextAccessor, seiren_devContext context)
        : base(httpContextAccessor,context)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

您可能还需要在ConfigureServices您的Startup.cs

services.AddHttpContextAccessor();
Run Code Online (Sandbox Code Playgroud)