代码改变世界

微软企业库4.1学习笔记(十九)缓存模块7 扩展和修改缓存模块

2010-04-25 23:03  Virus-BeautyCode  阅读(2229)  评论(2编辑  收藏  举报

  缓存模块可以满足大部分的缓存使用情形。但是,还是会有你想要自定义一些模块行为,来满足应用特殊需求的时候。你可以通过两个方式来达到目的:

  •   通过缓存模块提供的扩展点,扩展现有功能
  •   修改源代码

  一、扩展缓存模块

  通过设计好的扩展点来扩展应用的功能。典型的方式为,写一个自定义的类,实现某个接口,或者是继承某个抽象类。因为这些自定义类是在你的应用中使用,你不需要修改和重新编译模块。

  你可以自定义一种新的后端存储方式,添加一种过期策略,或者是新的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))] 

   

  二、修改模块

  如果你需要修改模块来满足应用的一些特殊需求的话,请参考下面的指导:

  •   确保你了解了模块的运行,阅读了相关的文档。
  •   如果你需要添加新的功能模块,而且需要和原来的一些模块一起运行的话,最好修改模块的命名空间,也要修改相关模块的命名空间。
  •   使用签名,使用签名可以保证程序集的唯一性
  •   在修改之后,记得要重新编译企业库的代码

 

  未完待续。。。。。。。。。。。。。。。。。。。。。。。。。