博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工厂 利用映射读取数据层方法并缓存映射数据
阅读量:4353 次
发布时间:2019-06-07

本文共 2523 字,大约阅读时间需要 8 分钟。

1、创建缓存方法(ProjectName是项目名称)
namespace ProjectName.Factory
{
    /// <summary>
    /// DataCache 的摘要说明。
    /// </summary>
    public class DataCache
    {        
        /// <summary>
        /// 获取当前应用程序指定CacheKey的Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <returns></returns>
        public static object GetCache(string CacheKey)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            return objCache[CacheKey];
        }
        /// <summary>
        /// 设置当前应用程序指定CacheKey的Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        public static void SetCache(string CacheKey, object objObject)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            objCache.Insert(CacheKey, objObject);
        }
        
    }
}
2、创建读取数据层的共有方法
导入命名空间 using System.Reflection;
namespace ProjectName.Factory
{
    /// <summary>
    /// DataAccess 的摘要说明。
    /// </summary>
    public sealed class DataAccess
    {
        public static readonly string path=ProjectName+".Factory";
        /// <summary>
        /// 创建对象或从缓存获取
        /// </summary>
        /// <param name="path">要映射的命名空间</param>
        /// <param name="CacheKey">要映射的命名空间下的类</param>
        public static object CreateObject(string path,string CacheKey)
        {
            object objType = DataCache.GetCache(CacheKey);//从缓存读取
            if (objType == null)
            {
                try
                {
                    objType = Assembly.Load(path).CreateInstance(CacheKey);//反射创建
                    DataCache.SetCache(CacheKey, objType);// 写入缓存
                }
                catch
                {}
            }
            return objType;
        }
    }
}
3、创建Model层   UserInfor、Roles    把所有创建的类都放在 ProjectName.Model的命名空间下
4、创建IDAL层    IUserInfor、IRoles  把所有创建的类都放在 ProjectName.IDAL的命名空间下
5、创建SQLDAL层  UserInfor、Roles    把所有创建的类都放在 ProjectName.SQLDAL的命名空间下
6、创建Factory层 UserInfor、Roles    把所有创建的类都放在 ProjectName.Factory的命名空间下
namespace ProjectName.Factory
{
    public class UserInfor
    {
        public static ProjectName.IDAL.IUserInfor Create()
        {
            string CacheKey = DataAccess.path+".UserInfor";
            object objType=DataAccess.CreateObject(DataAccess.path,CacheKey);
            return (ProjectName.IDAL.IUserInfor)objType;
        }
    }
}
namespace ProjectName.Factory
{
    public class Roles
    {
        public static IDAL.IRoles Create()
        {
            string CacheKey = DataAccess.path+".Roles";
            object objType=DataAccess.CreateObject(DataAccess.path,CacheKey);
            return (ProjectName.IDAL.IRoles)objType;
        }
    }
}
7、创建BLL 层  UserInfor、Roles     把所有创建的类都放在 项目名.BLL的命名空间下
namespace ProjectName.BLL
{
    public class UserInfor
    {
        private static readonly ProjectName.IDAL.IUserInfor dal = ProjectName.Factory.UserInfor.Create();
    }
}
namespace ProjectName.BLL
{
    public class Roles
    {
        private static readonly ProjectName.IDAL.IRoles dal = ProjectName.Factory.Roles.Create();
    }
}

转载于:https://www.cnblogs.com/lonelyofsoul/archive/2012/03/21/2409227.html

你可能感兴趣的文章
13-集体照
查看>>
读了曾国藩家书,,心态逐渐平和起来。搞技术的如果缺乏信念的指引,生活会很乏味无聊!...
查看>>
160809308周子济第六次作业
查看>>
大型Web应用运行时 PHP负载均衡指南
查看>>
为phpStorm 配置PHP_CodeSniffer自动检查代码
查看>>
测试工具网址大全(转)
查看>>
ServiceStack DotNet Core前期准备
查看>>
webpack中‘vant’全局引入和按需引入【vue-cli】
查看>>
Date、String和Timestamp类型转换
查看>>
计算机的组成
查看>>
[简单到爆]eclipse-jee-neon的下载和安装
查看>>
vector
查看>>
Redis学习之set类型总结
查看>>
栈和队列
查看>>
CSS2-3常见的demo列子总结一
查看>>
第522篇--DataTable to Excel C#
查看>>
C++\virtual 虚函数、纯虚函数
查看>>
asp.net mvc 4多级area实现技巧
查看>>
Solr
查看>>
MySQL binlog数据库同步技术总结
查看>>