gpt4 book ai didi

c# - 使用 IServiceProvider 获取 session 服务

转载 作者:行者123 更新时间:2023-12-04 13:57:50 24 4
gpt4 key购买 nike

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

我有一个使用委托(delegate)/lambda 表达式初始化的服务,它可以从任何地方返回值。在这种情况下,这个 lambda 表达式参数应该从 session 一次调用返回值。

这是示例代码:

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

我的 session 配置良好(我可以在 Controller 中获取/设置值)。但是,我无法从 IServiceProvider 获取服务。我找不到应该为 GetServices 方法提供什么类型来获取将找到 session 的服务。

最佳答案

Microsoft.AspNetCore.Session.DistributedSession实现 ISession , 但是 ISession未在 DI 系统中注册,因此无法直接解析。

但正如你所见 here , ISession在执行 Session 中间件期间创建并放入功能列表(中间件可以放入稍后在请求期间可以使用的数据的列表)。 HttpContext.Session属性由 ISessionFeature 填充在 session 中间件调用期间设置。所以你可以从 HttpContext 访问它.

您需要注册 IHttpContextAccessor

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

并解决这个问题,然后访问它的 HttpContext.Session属性(property)。您必须进行注册,因为 IHttpContextAccessor自 RC2 起默认不再注册,如本公告 here 中所述在 GitHub 问题跟踪器上。

关于c# - 使用 IServiceProvider 获取 session 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39552601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com