14抽象工厂获取数据访问层的实例,缓存的使用和反射的使用

Posted 蔡老菜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了14抽象工厂获取数据访问层的实例,缓存的使用和反射的使用相关的知识,希望对你有一定的参考价值。

工厂类的代码:

namespace Shop.DALFactory
{
    /// <summary>
    /// 抽象工厂。完成数据层中对象的创建(反射对象)
    /// </summary>
    public class AbstractFactory
    {
        //获取程序集的名称
        private static string DalAssemblyPath = ConfigurationManager.AppSettings["DalAssemblyPath"];
        //获取程序集的命名空间
        private static string NameSpace = ConfigurationManager.AppSettings["NameSpace"];
        /// <summary>
        /// 通过抽象工厂创建的一个数据访问层的类的实例
        /// </summary>
        /// <returns></returns>
        public static IDAL.ICustomerDAL CreateCustomerDAL()
        {
            //获取程序集下具体要创建的类的名称
            string fullClassName = NameSpace + ".CustomerDAL";
            return CreateInstance(fullClassName, DalAssemblyPath) as IDAL.ICustomerDAL;
        }
        /// <summary>
        /// 通过反射的方法反射一个类的实例
        /// </summary>
        /// <param name="fullClassName">具体命名空间空间下的类</param>
        /// <param name="dalAssemblyPath">命名空间</param>
        /// <returns>实例的object对象</returns>
        private static object CreateInstance(string fullClassName, string dalAssemblyPath)
        {
            //先从系统的缓存中获取实例对象
            object instance= Shop.Commom.CacheHelper.GetCache(fullClassName);
            if (instance == null)
            {
                //如果系统中未找到缓存对象,就通过反射的方法获取实例的对象
                Assembly ass = Assembly.Load(dalAssemblyPath);
                instance = ass.CreateInstance(fullClassName);
                //并将实例对象写入键(名称为命名空间加类型名)的值
                Shop.Commom.CacheHelper.InsertCahch(fullClassName, instance);
            }
            return instance;
        }
    }
}

  缓存类的代码:

namespace Shop.Commom
{
    public class CacheHelper
    {
        /// <summary>
        /// 根据键从缓存中取出值
        /// </summary>
        /// <param name="key">键</param>
        /// <returns></returns>
        public static object GetCache(string key)
        {
            //从系统中获取缓存的对象
            System.Web.Caching.Cache cache = HttpRuntime.Cache;
            return cache.Get(key);
        }
        /// <summary>
        /// 设置缓存数据
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public static void InsertCahch(string key,object value)
        {
            System.Web.Caching.Cache cache = HttpRuntime.Cache;
            cache.Insert(key, value);
        }
    }
}

  

以上是关于14抽象工厂获取数据访问层的实例,缓存的使用和反射的使用的主要内容,如果未能解决你的问题,请参考以下文章

就不能换DB吗? 抽象工厂模式

工厂模式——抽象工厂模式(+反射)

传统抽象工厂(通过反射来创建实例)-》目的为了解耦

Java反射机制用反射改进简单工厂模式设计

七层登录

使用抽象工厂反射获取不到Dal层对象,未能加载文件或程序集......