注入的 HttpContext 始终为 null

2024-06-18

老实说,这太令人兴奋了,我无法让它发挥作用。 无论注入到何处,上下文始终为空...

我是否必须在 Startup.cs 中添加上下文实例?如果是,怎么办?

始发呼叫

services.AddTransient<SessionService>();
Toast.Configure(app.ApplicationServices.GetRequiredService<SessionService>());
_session.Set("foo", "bar");

吐司类

public class Toast
{
    private static SessionService _session;
    public static void Configure(SessionService sessionService)
    {
        _session = sessionService;
        Messages = new List<ToastMessage>();
    }
}

会话服务

public class SessionService
{
    private readonly IHttpContextAccessor _accessor;
    public SessionService(IHttpContextAccessor httpContextAccessor)
    {
        _accessor = httpContextAccessor;
    }

    public void Set(string key, string value)
    {
        _accessor.HttpContext.Session.SetString(key, value);
    }
}

例外情况

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

System.Reflection.TargetInvocationException
Exception has been thrown by the target of an invocation.

堆栈跟踪

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at EveOps.Services.SessionService.Set(String key, Byte[] value) in C:\Users\youri\Documents\Visual Studio 2015\Projects\EveOps\src\EveOps\Services\SessionService.cs:line 25
   at EveOps.Toast.set_Messages(List`1 value) in C:\Users\youri\Documents\Visual Studio 2015\Projects\EveOps\src\EveOps\Toast\Toast.cs:line 41
   at EveOps.Toast.Configure(SessionService sessionService) in C:\Users\youri\Documents\Visual Studio 2015\Projects\EveOps\src\EveOps\Toast\Toast.cs:line 18
   at EveOps.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) in C:\Users\youri\Documents\Visual Studio 2015\Projects\EveOps\src\EveOps\Startup.cs:line 162
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at Microsoft.AspNet.Hosting.Startup.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
   at Microsoft.AspNet.Hosting.Startup.ConfigureBuilder.<>c__DisplayClass4_0.b__0(IApplicationBuilder builder)
   at Microsoft.AspNet.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder builder)
   at Microsoft.AspNet.Hosting.Internal.HostingEngine.BuildApplication()

感谢@aguafrommars 陈述了显而易见的事实;上下文仅对请求有效,尽管我知道这一点,但我对 DI 和服务的理解还没有达到很好的水平。

我的问题的解决方案(伪):

App.Use() {
   Toast.Configure(app.ApplicationServices.GetRequiredService<SessionService>());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

注入的 HttpContext 始终为 null 的相关文章

随机推荐

  • 使用 NuGet 下载 WebActivator 时出错

    我刚刚在公司计算机上更新了 NuGet 包管理器 自从更新后 我无法添加任何包 例如 我尝试安装 WebActivator 并收到以下错误 PM gt Install Package WebActivator Install Package
  • Python:如何定义一个获取字符串列表或字符串的函数

    假设我想向数据库添加一个字符串列表或仅一个字符串 names Alice Bob Zoe 我想要那个add to db将接受这两种情况 add to db names add to db John 这是正确的方法吗 def add to d
  • 单击警报内的“确定”按钮(Selenium IDE)

    我需要单击警报窗口内的 确定 按钮 并带有Selenium http seleniumhq org 命令 我试过了assertAlert or verifyAlert但他们不做我想做的事 可以单击 确定 按钮吗 如果是这样 有人可以给我提供
  • Unity 2d跳跃脚本

    有人有一个很好的统一 2d 游戏跳跃脚本吗 我的代码可以工作 但距离跳跃还很远 看起来像是在飞 using UnityEngine using System Collections public class movingplayer Mon
  • Vue警告无法解析组件:ion-icon

    以下的用法如下https ionicons com usage https ionicons com usage the ion icon显示但我收到此警告 Failed to resolve component ion icon 我的步骤
  • 是否可以使用 Javascript 检索文件的最后修改日期?

    我的网页上有一组链接到 PDF 表单和 doc 表单的链接 这些文件不存储在数据库中 只是按原样存储在本地服务器上 是否可以使用 JavaScript 检索 PDF 或 DOC 文件的最后修改日期 我没有任何特定需要使用 Javascrip
  • scala play框架如何对异步控制器进行单元测试

    使用 Scala play 2 5 版并尝试遵循以下文档中的单元测试控制器指南 https www playframework com documentation 2 5 x ScalaTestingWithScalaTest https
  • python 中的不均匀分块

    给定一个块大小列表 如何将可迭代对象划分为可变长度块 我正在努力哄itertools islice还没有成功 for chunk size in chunk list foo iter chunk size 你需要做一个iter你的可迭代对
  • 可以将 boost 累加器用作类成员

    我正在尝试使用升压累加器来计算滚动平均值 当我像这样声明内联变量时 include
  • 在 ArrayAdapter 上使用 ViewBinding

    我正在尝试重构我的应用程序以使用ViewBinding 我已经浏览了所有的片段和活动 然而 我有一个ArrayAdapter我不确定使用视图绑定来防止内存泄漏的正确约定 正确的使用方法是什么viewbinding在 ArrayAdapter
  • Facebook 错误“验证验证码时出错”

    非常奇怪的错误 我用基德http developers facebook com docs authentication http developers facebook com docs authentication 所以我创建了对fb的
  • 如何与字符串进行部分匹配?

    如何输入单词的部分字母来查找该单词 例如 我有一个字符串数组 String s Cartoon Cheese Truck Pizza 如果我输入部分字母 例如 ca Che 或 piz 然后我就可以找到列表中的整个单词 Thanks str
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • Android 何时使用 ContentResolver applyBatch 或 BulkInsert

    现在 对于我的应用程序 当我想要更改 ContentProvider 的数据时 我只需使用 ContentResolver 的插入 更新和删除方法 但在 Android SDK 中的几个示例项目中 我注意到它们使用了 applyBatch
  • 多实例 COM 对象

    我在 C 中使用 C 编写的 COM 对象 我只是通过 new 创建实例 我需要很多这样的物体 但每个其他 新 不会创建新实例 而仅提供第一个对象的引用 这就是为什么我对数据一团糟 是否可以每次都获取新实例 或者我应该在我的COM中实现IC
  • 向 Serilog 添加自定义属性

    我在应用程序中将 Serilog 与 MS SQL Server 接收器一起使用 假设我已经定义了以下类 public class Person public string FirstName get set public string L
  • CKEditor 禁用自动编辑 HTML 代码

    我需要在我的 CREditor 之一中禁用自动编辑代码 如果我将此代码作为 HTML 放置 div class kontaktJeden div class obr img src images insol png alt div div
  • 优化 SQL Server 上的删除

    Deletesql server 上的有时很慢 我经常需要优化它们以减少所需的时间 我一直在谷歌上搜索一些关于如何做到这一点的提示 并且我发现了各种各样的建议 我想知道你最喜欢和最有效的驯服删除野兽的技术 以及它们如何以及为什么起作用 到目
  • 学说 dbal querybuilder 作为准备好的语句

    我正在尝试创建一个 Doctrine DBAL 查询生成器对象并在其中设置一个参数 使用 postgres db dbal 2 3 4 原则 connection this gt em gt getConnection qb connect
  • 注入的 HttpContext 始终为 null

    老实说 这太令人兴奋了 我无法让它发挥作用 无论注入到何处 上下文始终为空 我是否必须在 Startup cs 中添加上下文实例 如果是 怎么办 始发呼叫 services AddTransient