c# – ASP.NET Core 2.0中的应用程序变量
我如何在ASP.NET Core 2.0中设置和访问应用程序范围的变量?
细节: 解决方法
在过去的100年中取得了很大进展.前段时间,我相信ASP.NET 1.0,ASP经典中的Application对象被取代了缓存(虽然Application对象是为了向后兼容ASP经典而留下的).
AspNetCore有replaced the caching mechanism of ASP.NET并且它对DI友好,但它仍然非常类似于ASP.NET中的状态.主要区别在于您现在需要注入它而不是使用静态HttpContext.Current.Cache属性. 在启动时注册缓存… using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddMemoryCache(); services.AddMvc(); } public void Configure(IApplicationBuilder app) { app.UseMvcWithDefaultRoute(); } } 你可以像…那样注入它 public class HomeController : Controller { private IMemoryCache _cache; public HomeController(IMemoryCache memoryCache) { _cache = memoryCache; } public IActionResult Index() { string companyName = _cache[CacheKeys.CompanyName] as string; return View(); } 然后为了使它在应用程序范围内工作,您可以使用filter或middleware结合某种缓存刷新模式: >尝试从缓存中获取值 >查找数据库中的数据 >返回值 public string GetCompanyName() { string result; // Look for cache key. if (!_cache.TryGetValue(CacheKeys.CompanyName,out result)) { // Key not in cache,so get data. result = // Lookup data from db // Set cache options. var cacheEntryOptions = new MemoryCacheEntryOptions() // Keep in cache for this time,reset time if accessed. .SetSlidingExpiration(TimeSpan.FromMinutes(60)); // Save data in cache. _cache.Set(CacheKeys.CompanyName,result,cacheEntryOptions); } return result; } 当然,您可以清理它并使用强类型属性创建服务作为注入控制器的缓存的包装器,但这是一般的想法. 另请注意,如果要在Web服务器之间共享数据,则需要使用distributed cache.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |