Сделайте HomeController наследуемым от BaseController с атрибутом session

#c# #asp.net-mvc #asp.net-core #model-view-controller

#c# #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)
    {

    }
}
 

Мой 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 класс наследовать от BaseController него надлежащим образом?

Комментарии:

1. Правильный термин — inherit или extend (а не наследник)

Ответ №1:

Ничто не устанавливает static переменные (примечание: static очень плохо в этом контексте) HomeController , поэтому они всегда будут равны нулю. Вместо этого заставьте HomeController также принимать два значения в качестве параметров конструктора, а система внедрения зависимостей позаботится обо всем остальном.

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

Вам также может понадобиться эта строка ConfigureServices в вашем Startup.cs :

 services.AddHttpContextAccessor();
 

Ответ №2:

Вам нужно добавить в ConfigureServices

 services.AddHttpContextAccessor();
 

Комментарии:

1. Хотя это может быть правильным, это не основная причина проблемы, с которой сталкивается OP.