我需要使用 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(使用前将#替换为@)