缓存模块可以满足大部分的缓存使用情形。但是,还是会有你想要自定义一些模块行为,来满足应用特殊需求的时候。你可以通过两个方式来达到目的:
- 通过缓存模块提供的扩展点,扩展现有功能
- 修改源代码
一、扩展缓存模块
通过设计好的扩展点来扩展应用的功能。典型的方式为,写一个自定义的类,实现某个接口,或者是继承某个抽象类。因为这些自定义类是在你的应用中使用,你不需要修改和重新编译模块。
你可以自定义一种新的后端存储方式,添加一种过期策略,或者是新的CacheManager。
1.1添加新的后端存储
添加一个新类,实现IBackingStore接口,或者是继承自BaseBackingStore类。你一定要在实现的方法中保证,如果在访问后端存储的时候发生意外的话,后端存储仍然完整无缺,可以提供服务。
因为是Cache操作,可以确保任何对后端存储的操作都是单线程的方式。这意味着在你实现的过程中不用考虑线程安全。
1.2添加一个新的过期策略
实现一个新的过期策略,需要添加的类实现下面的接口:
- ICacheItemExpiration,接口允许开发者定义自己的过期规则,定义如何和什么时候一个缓存项CacheItem过期。
- ICacheItemRefreshAction,过期之后,可以更新缓存,实现这个接口的类必须可序列化。
1.3改变默认的CacheManager
缓存模块中的CacheManager实现了ICaheManager接口。当系统初始化的时候,CacheManager从后端存储中加载数据到内存中,通过它暴露的方法,可以添加项,删除项,获取缓存的数据。
尽管默认的CacheManager可以满足大部分的应用需要,还是有可能在你的应用有特殊需求的时候,你可以实现自己的CacheManager来修改缓存模块的行为。下面列出一些你可能会需要的功能:
实现一个分布式的、或者是特殊的缓存方式,支持不同的解决方案,不仅仅是存储和获取数据,通过添加自定义的后端存储也解决不了。
改变CacheManager加载数据到内存的方式,只加载最常使用的项,或者是按照要求使得加载项最少。
创建自定义的CacheManager,需要实现ICacheManager接口,还需要添加下面的特性,告诉配置系统这个CacheManager类是可以安装和配置的类。
[ConfigurationElementType(typeof(CustomCacheManagerData))]
二、修改模块
如果你需要修改模块来满足应用的一些特殊需求的话,请参考下面的指导:
- 确保你了解了模块的运行,阅读了相关的文档。
- 如果你需要添加新的功能模块,而且需要和原来的一些模块一起运行的话,最好修改模块的命名空间,也要修改相关模块的命名空间。
- 使用签名,使用签名可以保证程序集的唯一性
- 在修改之后,记得要重新编译企业库的代码