#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.