使 HomeController 继承自具有属性会话的 BaseController

Make a HomeController inherit from a BaseController with attribute session

IHttpContextAccessor 给我:

System.NullReferenceException: 'Object reference not set to an instance of an object.'

我的HomeController:

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

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

    }
}

我的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;
    }
}

如何让 HomeController Class 以正确的方式继承自 BaseController

您需要在ConfigureServices中添加

services.AddHttpContextAccessor();

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

public class HomeController : BaseController
{
    public HomeController(IHttpContextAccessor httpContextAccessor, seiren_devContext context)
        : base(httpContextAccessor,context)
    {
    }
}

您的 Startup.cs 中的 ConfigureServices 中可能还需要这一行:

services.AddHttpContextAccessor();