Edu*_*eni 14 c# caching asp.net-core-mvc asp.net-core
我的旧代码看起来像这样:
public static class DbHelper {
// One conection per request
public static Database CurrentDb() {
if (HttpContext.Current.Items["CurrentDb"] == null) {
var retval = new DatabaseWithMVCMiniProfiler("MainConnectionString");
HttpContext.Current.Items["CurrentDb"] = retval;
return retval;
}
return (Database)HttpContext.Current.Items["CurrentDb"];
}
}
Run Code Online (Sandbox Code Playgroud)
由于我们没有HttpContext在核心中可以轻松访问,我怎样才能实现同样的目的呢?
我需要CurrentDb()从各处轻松访问
想使用像MemoryCache这样的东西,但是请求生命周期.DI它不是这个项目的选择
Ily*_*kov 13
在ASP.NET Core中至少有3个选项可以存储每个请求的对象:
您可以完全重新设计旧代码:使用内置DI并Database使用以下工厂方法将实例注册为作用域(每个Web请求):
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<Database>((provider) =>
{
return new DatabaseWithMVCMiniProfiler("MainConnectionString");
});
}
Run Code Online (Sandbox Code Playgroud)
此集合在HttpRequest开始时可用,并在每个请求结束时被丢弃.
每个当前异步上下文存储一个值(一种[ThreadStatic]具有异步支持的).这是如何HttpContext实际存储的:HttpContextAccessor.
AsyncLocal <T>在非异步/等待代码中有什么影响?
异步ASP.NET Web API中的ThreadStatic
| 归档时间: |
|
| 查看次数: |
3831 次 |
| 最近记录: |