使 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();
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();