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

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

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 类以正确的方式继承 BaseController

最佳答案

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

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

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

services.AddHttpContextAccessor();

关于c# - 让 HomeController 继承自具有 session 属性的 BaseController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66045844/

相关文章:

c# - Visual Studio 2008 要求保存对 .SLN 文件的更改

c# - 在执行时使用 MVC 3 和 jQuery Validator 添加验证

jquery - MVC.NET 自定义验证器不起作用

c# - 如何从图像/位图对象返回图像作为 IActionResult

node.js - Visual Studio 2015 Update 2 中的 NPM 错误,无法还原包

c# - 将返回表达式的方法引用到另一个方法的语法?

c# - 如何使用反射将事件处理程序附加到事件?

c# - ApplicationServices(根)IServiceProvider 和注入(inject)的 IServiceProvider 有什么区别?

c# - 如何调试无法重现的bug?

c# - 在数组中使用命名键 C# MVC razor