在启动类中,我可以在ConfigureServices方法中添加服务.当我想要获得一定的服务时,HttpContext实例,applicationservices和RequestServices中有2个属性.我想知道他们之间的区别和如何正确使用它们.
编辑#1:
例如,在启动类中:
public void ConfigureServices(IServiceCollection services) { services.AddSingleton<ICache,InProcessCache>(); // Line 1 services.AddSingleton<ISystemClientResolver>(SystemClientResolver.CreateInstance); // Line 2 services.AddScoped<SystemClient>(); // Line 3 services.AddRvcBusiness(); // Line 4 services.AddMvc(); // Line 5 }
如果我没有在配置(IApplicationBuilder app)方法中调用app.UseRequestServices(),我可以通过Context.applicationservices.GetService(typeof(SystemClient))获取SystemClient实例,但是并不是按请求的基础,它似乎是单例和上下文.RequestServices为空.一旦我这样调用app.UseRequestServices():
public void Configure(IApplicationBuilder app) { app.UseRequestServices(); // ... }
Context.RequestServices不为空,我可以通过Context.RequestServices.GetService(typeof(SystemClient))获取SystemClient实例,并且该实例是基于每个请求的.
解决方法
applicationservices适用于您的应用程序的生命周期,而RequestServices的作用域是特定的请求(HttpContext).此外,RequestServices可以为null.一个特殊的RequestContainer中间件是初始化RequestServices:
app.UseRequestServices()将使用ConfigureServices的结果作为RequestServices
app.UseServices()及其重载让您指定/修改请求服务
此外,如果您使用路由/或任何安全的验证中间件,它们将自动确保RequestServices也被填充,因为它们依赖于请求作用域服务本身.
原文地址:https://www.jb51.cc/aspnet/250480.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。