使用 IServiceProvider 获取会话服务

2024-02-25

我需要使用 IServiceProvider 访问 ASP.NET Core 1.0 中的 ConfigureService 方法中的会话变量。

我有一个使用委托/lambda 表达式初始化的服务,可以从任何地方返回值。在此上下文中,此 lambda 表达式参数应在调用后从会话返回值。

这是示例代码:

public void ConfigureServices(IServiceCollection services)
{

     services.AddTransient<IMyService>(serviceProvider =>
            {
                return new MyService(() => {
                        var session = serviceProvider.GetServices<Microsoft.AspNetCore.Session.DistributedSession>().First();
                        return session.GetString("CompanyID");
                    }
                );
            }

      );

      // Add framework services.
      services.AddMvc();
      services.AddDistributedMemoryCache();
      services.AddSession();
}

我的会话配置良好(我可以在控制器中获取/设置值)。但是,我无法从 IServiceProvider 获取服务。我找不到应向 GetServices 方法提供什么类型来获取可查找会话的服务。


Microsoft.AspNetCore.Session.DistributedSession实施ISession, but ISession未在 DI 系统中注册,因此您无法直接解析它。

但正如你所看到的here http://github.com/aspnet/Session/blob/1.0.0/src/Microsoft.AspNetCore.Session/SessionMiddleware.cs#L100-L102, the ISession在 Session 中间件执行期间创建并放入功能列表中(中间件可以在其中放置稍后在请求期间可以使用的数据的列表)。这HttpContext.Session属性由以下内容填充ISessionFeature在会话中间件调用期间设置。所以你可以从HttpContext.

您需要注册IHttpContextAccessor with

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

并解决这个问题,然后访问它HttpContext.Session财产。您必须进行注册,因为IHttpContextAccessor如本公告中所述,自 RC2 起不再默认注册here https://github.com/aspnet/Announcements/issues/190在 GitHub 问题跟踪器上。

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

使用 IServiceProvider 获取会话服务 的相关文章

  • 添加 Nullable int 时保持 null?

    我想添加可为空的int 并保留null当所有值都是null 我想要这个结果 1 2 3 1 null 1 null null null O null 0 问题是 如果我将一个值与 null 相加 结果为 null int i1 1 int
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • C# 开源 NMEA 解析器 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 C 开源 NMEA 解析器 嗯 我自己也不熟悉 但是一些快速搜索显示了一个代码项目 htt
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc

随机推荐

  • 使用主机系统上的客户端访问在虚拟机中运行的 HBase

    我尝试使用客户端程序将一些数据写入hbase HBase Hadoop 在 Cloudera ubuntu 的预配置虚拟机中运行 客户端运行在托管虚拟机的系统上 并直接在虚拟机中运行客户端 所以现在想使用vm外的客户端来访问vm上的服务器
  • 是否可以从命令行启动 IE 的代理设置对话框?

    有没有办法从 Windows 命令行启动 IE 代理设置对话框 以节省在任何应用程序中浏览菜单的时间 我发现了另一个更短的 inetcpl cpl 4 您可以在运行框或命令提示符中使用它
  • IE11 + Angular 1.5.11 上奇怪的渲染行为

    我们目前正在 Angular 版本 1 5 11 中开发一个应用程序 现在它已经变得相当大 数百个控制器等 我们偶然发现了 Internet Explorer 11 中的一个问题 一段时间后 有时是几分钟 有时是几个小时 页面开始出现渲染故
  • Visual Studio 无法识别我的网络摄像头激光测距仪代码的 MFC 库

    我尝试直接从互联网复制源代码 但由于下面发现的错误 我无法构建 调试整个文件 请帮忙 Error occurred while restoring NuGet packages System ArgumentException The pa
  • 如何使用 gdb 调试进程而不暂停它?

    我有一个已经在运行的进程 我想用 GDB 调试它 我一直在使用 gdb pid PID 但是 当我这样做时 该过程会暂停 我想附加到进程而不暂停它 并在它仍在运行时在其内存中查看 这可能吗 或者 有没有办法 分叉 该进程 以便我可以查看其内
  • canOpenUrl 失败,但 openUrl 成功

    我面临一个奇怪的问题 我正在使用 xcode 7 2 iOS 9 在真实设备 iphone 4S 不是模拟器 上工作 我有 2 个应用程序 app1 和 app2 app1 应该使用 url 方案将数据发送到 app2 app2已经很好地声
  • 为什么Python中只有主线程可以设置信号处理程序

    在Python的信号处理语义中 只有主线程可以设置信号处理程序 并且只有主线程可以调用信号处理程序 为什么要这样设计呢 此注释出现在 cpython 源文件中信号模块 c https github com python cpython bl
  • 无手拒绝错误:交易查询已完成 - knex、express.js

    我试图首先检查表中的值 如果存在 则删除另一个表中的行并将此新数据插入该表中 我使用了带有 select del 和 insert 命令的事务 db transaction trx gt return trx users where use
  • 没有为实体指定标识符/主键(...)每个实体都必须具有标识符/主键

    I have Peticion实体 但缺少某些内容 因为出现以下错误 No identifier primary key specified for Entity Every Entity must have and identifier
  • cocos2d-x android 设置错误 - java.lang.NullPointerException

    我正在尝试设置适用于 Android 的 cocos2d x我跟着 我通过了终端的步骤 没有任何问题 setup py命令结果符合预期 我的问题是在我设置之后NDK ROOT in C C 构建 环境部分 我得到一些java lang Nu
  • 如何修复猫鼬中的“.create 不是函数”错误

    我正在尝试初始化 Seed js 文件以在我的数据库中启动一些内容 但是当我运行时node bin seed js我不断得到 TypeError Celebrity create is not a function 我已尝试重新安装mong
  • 如何使用滑块同步两个树视图中的滚动

    我正在使用 Visual Studio 2010 C 和 Windows 窗体应用程序 我有两个并排的树视图 并且我已经弄清楚如何使用滚动条上的向上 向下按钮同步滚动 但是当我使用滑块时 它不会移动另一个树视图 我采取了一个有效的列表视图示
  • RxJava,一个可观察多个订阅者:publish().autoConnect()

    我正在使用 rxJava rxAndroid 但有一些非常基本的东西没有按照我的预期运行 我有一个可观察对象和两个订阅者 Observable
  • 它不是附加变量

    我想附加使用上传的文件的名称 POST发布方法 FILES fileImage name 来自 php 脚本 问题是 文件上传后 我没有看到附加的文件名 它只显示空白 为什么文件上传成功后没有附加文件名 如果有人可以提供一个编码示例 那么它
  • 在Python中以空格分割列表中的每个字符串[重复]

    这个问题在这里已经有答案了 我有一个列表 其中包含一个 url 和 Python 中大列表的每个项目中的一些文本 每次出现空格时 我想将每个项目拆分为多个项目 每个项目 2 3 个空格 没有太多代码要发布 它只是目前存储在命名变量中的列表
  • 为什么 julia 无法识别作为函数参数传递的数组类型,而是将其列为 Any?

    我正在 Julia 中定义一个接受向量的函数 具体来说Vector Complex128 当我查看输出时 code warntype我看到变量类型被列为Any 据我了解 这可能会对速度产生影响 这是代码的简单版本 例如 function a
  • 非阻塞 IO 与异步 IO 以及 Java 中的实现

    尝试为自己总结这两个概念之间的区别 因为当我看到人们在一个句子中使用这两个概念时 我真的很困惑 例如 非阻塞异步 IO 我试图弄清楚它是什么意思是 因此 根据我的理解 非阻塞 IO 是操作系统在有任何数据准备好时处理 IO 的主要机制 否则
  • AWS Glue 爬网程序未创建表

    我在 AWS Glue 中创建的爬网程序在成功完成后不会在数据目录中创建表 爬网程序大约需要 20 秒才能运行 日志显示它已成功完成 CloudWatch日志显示 基准 为爬网程序运行启动爬网 基准 分类完成 将结果写入DB 基准 完成写入
  • 使用 Android 设备将实时视频流发送到 wowza 流引擎

    我想将实时视频流从我的 Android 设备发送到 wowza 流引擎 我在此使用示例blog http www walking productions com notslop 2013 01 16 android live streami
  • 使用 IServiceProvider 获取会话服务

    我需要使用 IServiceProvider 访问 ASP NET Core 1 0 中的 ConfigureService 方法中的会话变量 我有一个使用委托 lambda 表达式初始化的服务 可以从任何地方返回值 在此上下文中 此 la