法实在是不方便,所以修改成泛型类(同时附了原来的反射代码,可以对比下那种方式比较好),在BLL层调用的时候只需传递要转成的接口即可,代码如下:
public static class DataAccess
private static readonly string assemblyString = ConfigurationManager.AppSettings[\];
///
/// 通用对象反射(包含缓存) ///
/// ///
public static T CreateObject(string className) {
var typeName = assemblyString + \ + className; //判断对象是否被缓存,如果已经缓存则直接从缓存中读取,反之则直接反射并缓存
var obj = (T)CacheHelper.GetCache(typeName); if (obj == null) {
obj =
(T)Assembly.Load(assemblyString).CreateInstance(typeName, true);
CacheHelper.Add(typeName, obj, true); }
return obj; }
public static IClassInfoService CreateClassInfo() {
string typeName = assemblyString + \;
//判断对象是否被缓存,如果已经缓存则直接从缓存中读取,反之则直接反射并缓存
if (CacheHelper.GetCache(typeName) != null) {
return
(IClassInfoService)CacheHelper.GetCache(typeName); } else {
IClassInfoService service =
(IClassInfoService)Assembly.Load(assemblyString).CreateInstance(typeName, true);
CacheHelper.Add(typeName, service, true); return service; } }
需要注意的是由于使用企业库的Cache,如果缓存到数据库或者独立存储必须要求缓存对象必须是可序列化的,内存中缓存就不需要,而我这边缓存的对象为DAL层中具体的操作类,所以如果要更改为非内存存储需要将操作类加上[Serializable]特性。 这样以后再添加新的表就无需修改工厂中的DataAccess类了。
以上就是缓存在本项目中的一些基本应用,由于水平有限,所以暂时无法提出缓存的一些高级应用,请大家见谅。
相关Cache模块配置可以查看huangcong写的Cache模块(初级),一些相关知识可以查看virusswb写的缓存的设计目的。 注意:
1、MSSQL数据库在DataBase目录下(需要自行附加数据库),SQLite数据库在Web目录的App_Data下,由于考虑到项目的大小,所以每个项目的BIN目录都已经删除,如出现无法生成项目请自行添加相关企业库的DLL。
2、由于微软企业库5.0 学习之路这个系列我是准备以一个小型项目的形式介绍企业库的各模块,所以源代码会根据系列文章的更新而更新,所以源代码不能保证与文章中所贴代码相同。
3、项目开发环境为:VS2010+SQL2005。 4、管理员帐户:admin 密码:admin 源代码下载地址:点我下载
微软企业库5.0 学习之路系列文章索引: 第一步、基本入门
第二步、使用VS2010+Data Access模块建立多数据库项目 第三步、为项目加上异常处理(采用自定义扩展方式记录到数据库中) 第四步、使用缓存提高网站的性能(EntLib Caching)
第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——中篇
第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——下篇
第六步、使用Validation模块进行服务器端数据验证
第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇 第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—下篇 第八步、使用Configuration Setting模块等多种方式分类管理企业库配置信息 第九步、使用PolicyInjection模块进行AOP—PART1——基本使用介绍
第九步、使用PolicyInjection模块进行AOP—PART2——自定义Matching Rule
第九步、使用PolicyInjection模块进行AOP—PART3——内置Call Handler介绍 第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录
第十步、使用Unity解耦你的系统—PART1——为什么要使用Unity? 第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1) 第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(2) 第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(3) 第十步、使用Unity解耦你的系统—PART3——依赖注入 第十步、使用Unity解耦你的系统—PART4——Unity&PIAB 扩展学习:
扩展学习篇、库中的依赖关系注入(重构 Microsoft Enterprise Library)[转]

