对于传统的.NET Framework项目而言,System.Runtime.Caching命名空间是常用的工具了,其中MemoryCache类则常被用于实现内存缓存。

.NET Core 2.0暂时还不支持System.Runtime.Caching dll,这也就意味着MemoryCache相关代码不再起作用了。

但是好消息是,我们可以使用.NET Core 2.0的新API实现内存缓存功能,简单修改代码,解决不兼容问题。

解决方案


  1.将旧代码导入项目中,如下:

using System;

using System.Runtime.Caching;

namespace TestWebApp.Service

{

public class MemoryCacheService

{

static ObjectCache cache = MemoryCache.Default;

/// <summary>

/// 获取缓存值

/// </summary>

/// <param name="key"></param>

/// <returns></returns>

private object GetCacheValue(string key)

{

if (key != null && cache.Contains(key))

{

return cache[key];

}

return default(object);

}

/// <summary>

/// 添加缓存内容

/// </summary>

/// <param name="key"></param>

/// <param name="value"></param>

public static void SetChacheValue(string key, object value)

{

if (key != null)

{

CacheItemPolicy policy = new CacheItemPolicy

{

SlidingExpiration = TimeSpan.FromHours(1)

};

cache.Set(key, value, policy);

}

}

}

}

导入后你会发现VS会提示无法找到System.Runtime.Caching命名空间,原有的代码无法直接编译使用。

  2.添加对Microsoft.Extensions.Caching.Memory命名空间的引用,它提供了.NET Core默认实现的MemoryCache类,以及全新的内存缓存API

  

using Microsoft.Extensions.Caching.Memory;

  3.改写代码,使用新的API实现内存缓存功能

  初始化缓存对象方式改写前:

static ObjectCache cache = MemoryCache.Default;

  初始化缓存对象方式改写后:

static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());

  读取内存缓存值方式变化:

private object GetCacheValue(string key)

{

if (key != null && cache.Contains(key))

{

return cache[key];

}

return default(object);

}

改写后:

private object GetCacheValue(string key)

{

object val = null;

if (key != null && cache.TryGetValue(key, out val))

{

return val;

}

else

{

return default(object);

}

}

设定内存缓存内容方式变化:

public static void SetChacheValue(string key, object value)

{

if (key != null)

{

CacheItemPolicy policy = new CacheItemPolicy

{

SlidingExpiration = TimeSpan.FromHours(1)

};

cache.Set(key, value, policy);

}

}

修改后:

public static void SetChacheValue(string key, object value)

{

if (key != null)

{

cache.Set(key, value, new MemoryCacheEntryOptions

{

SlidingExpiration = TimeSpan.FromHours(1)

});

}

}

结论


在使用了Microsoft.Extensions.Caching.Memory下的新API改写了旧代码后,你会发现原有的各种内存缓存超时策略全都是有对应新API的,包括AbsoluteExpiration, SlidingExpiration等等。

所以我们还是可以很轻松的使用.NET Core新API简单改动下下就能重用现有绝大部分旧代码,将其迁移过来继续起作用。

迁移后的完整代码如下:

using Microsoft.Extensions.Caching.Memory;

using System;

namespace TestMemoryCacheWebApp.Services

{

public class MemoryCacheService

{

static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());

/// <summary>

/// 获取缓存值

/// </summary>

/// <param name="key"></param>

/// <returns></returns>

private object GetCacheValue(string key)

{

object val = null;

if (key != null && cache.TryGetValue(key, out val))

{

return val;

}

else

{

return default(object);

}

}

/// <summary>

/// 添加缓存内容

/// </summary>

/// <param name="key"></param>

/// <param name="value"></param>

public static void SetChacheValue(string key, object value)

{

if (key != null)

{

cache.Set(key, value, new MemoryCacheEntryOptions

{

SlidingExpiration = TimeSpan.FromHours(1)

});

}

}

}

}

相关文章:

  • .NET应用迁移到.NET Core(一)

  • .NET应用迁移到.NET Core(二)风险评估

  • .NET应用迁移到.NET Core(三)从商业角度看移植过程

  • .NET应用迁移到.NET Core--调查案例

  • 迁移传统.net 应用到.net core [视频]

  • 应用工具 .NET Portability Analyzer 分析迁移dotnet core

  • .net core 2.0学习笔记(一):开发运行环境搭建

  • .net core 2.0学习笔记(二):Hello World & 进阶

  • 度量.net framework 迁移到.net core的工作量

  • 迁移.net framework 工程到.net core

  • 程序配置&ConfigurationManager

  • .NET Core 2.0迁移技巧之web.config配置文件

原文地址:http://www.cnblogs.com/mantgh/p/7429551.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

.NET Core 2.0迁移技巧之MemoryCache问题修复相关推荐

  1. .NET Core 2.0迁移技巧之web.config配置文件

    大家都知道.NET Core现在不再支持原来的web.config配置文件了,取而代之的是json或xml配置文件.官方推荐的项目配置方式是使用appsettings.json配置文件,这对现有一些重 ...

  2. ASP.NET Core 3.0 迁移避坑指南

    一.前言 .NET Core 3.0将会在 .NET Conf 大会上正式发布,截止今日发布了9个预览版,改动也是不少,由于没有持续关注,今天将前面开源的动态WebApi项目迁移到.NET Core ...

  3. ASP.NET Core 2.0 自定义 _ViewStart 和 _ViewImports 的目录位置

    在 ASP.NET Core 里扩展 Razor 查找视图目录不是什么新鲜和困难的事情,但 _ViewStart 和 _ViewImports 这2个视图比较特殊,如果想让 Razor 在我们指定的目 ...

  4. migration mysql_MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例...

    dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...

  5. .NET Core 3.0 即将结束生命周期,建议迁移 3.1

    .NET Core 官方发布博客,说明 .NET Core 3.0 即将结束生命周期,建议开发者迁移到 3.1 版本. .NET Core 3.0 于 2019 年 12 月 3 日发布,这是一个 C ...

  6. 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0

    今年五月的 Build 大会上,微软说 .NET Core 3.0 将带来 WPF / Windows Forms 这些桌面应用的支持.当然,是通过 Windows 兼容包(Windows Compa ...

  7. 把旧系统迁移到.Net Core 2.0 日记(1) - Startup.cs 解析

    因为自己到开发电脑转到Mac Air,之前的Webform/MVC应用在Mac 跑不起来,而且.Net Core 2.0 已经比较稳定了. 1. 为什么会有跨平台的.Net Core  近年来,我们已 ...

  8. Entity Framework Core 2.0 使用代码进行自动迁移

    一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...

  9. 为什么你需要将代码迁移到ASP.NET Core 2.0?

    随着 .NET Core 2.0 的发布,.NET 开源跨平台迎来了新的时代.开发者们可以选择使用命令行.个人喜好的文本编辑器.Visual Studio 2017 15.3 和 Visual Stu ...

最新文章

  1. 记住密码以及Android 列表的操作
  2. Android之解决在scrollview中嵌套ListView切换界面时scrollview整体向下滑动
  3. 前端大神用React刻了一个Windows XP
  4. 配置管理之PackageProvider接口
  5. 软件项目管理0806:分包付款资料
  6. sqoop 增量导入mysql_sqoop增量导入数据库
  7. HDU - 6356 Glad You Came(线段树)
  8. HDU 2996 In case of failure [KD树]
  9. Java 9 将采用新的版本字符串格式
  10. #define typedef 区别
  11. 数据挖掘学习笔记 5 线性回归知识及预测糖尿病实例
  12. Python计算机视觉中译本实例代码/数据集
  13. HOWTO:InstallShield中如何通过脚本获取“My Documents”路径
  14. 乌鲁木齐高新区大数据产业首个惠农项目落地
  15. 通话时自动中断音乐播放_您知道用户在何处以及为何中断通话吗?
  16. java5.0下载_java虚拟机官方下载|java虚拟机下载 v5.0 官方免费版-520下载站
  17. 编译原理研究性学习专题 2——递归下降语法分析设计原理与实现
  18. linux wps 微软雅黑字体,微软雅黑字体下载,微软雅黑字体下载应用到wps
  19. ionic基本命令行
  20. 硬货专栏 |深入浅出 WebRTC AEC(声学回声消除)

热门文章

  1. 第十一周项目3-程序的多文件组织
  2. MYSQ 查看 2 进制日志
  3. 酷桌面:随身携带你的企业
  4. 一个IT人的非典型职场十年 (5)
  5. NET框架下如何使用PaddleOCRSharp
  6. 万箭齐发!COSCon' 21深圳分会场闪亮登场!
  7. Blazor WebAssembly 应用程序中进行 HTTP 请求
  8. iNeuOS工业互联平台,发布消息管理、子用户权限管理、元件移动事件、联动控制、油表饼状图和建筑类设备驱动,v3.4版本...
  9. 如何在 ASP.NET Core 中使用 Route 特性
  10. 解锁环境变量在云原生应用中的各种姿势