科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道疑问解惑 使用C#的反射机制时遇到的问题

疑问解惑 使用C#的反射机制时遇到的问题

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  项目DALFactory是采用工厂模式设计的,设计模式的书我也曾看过Java的设计模式,理解也不太深刻,但对工厂模式还是较为熟悉,使用它可以根据需求返回不同的实例对象,在DALFactory项目中使用反射机制来实现依赖注入,当然。

作者:中国IT实验室 来源:中国IT实验室 2007年10月10日

关键字: 反射机制 C# 疑问解惑

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  项目DALFactory是采用工厂模式设计的,设计模式的书我也曾看过Java的设计模式,理解也不太深刻,但对工厂模式还是较为熟悉,使用它可以根据需求返回不同的实例对象,在DALFactory项目中使用反射机制来实现依赖注入,当然,它的实现还是没有java中的spring那样灵活,强大,部分代码如下:

  // <summary>
  /// 抽象工厂模式创建DAL。
  /// Web.config 需要加入配置:(利用工厂模式+反射机制+缓存机制,实现动态创建不同的数据层对象接口)
  /// DataCache类在导出代码的文件夹里
  /// 可以把所有DAL类的创建放在这个DataAccess类里
  /// <appSettings>
  /// <add key="DAL" value="SmsSystem.SQLServerDAL" /> (这里的命名空间根据实际情况更改为自己项目的命名空间)
  /// </appSettings>
  /// </summary>
  public sealed class DataAccess
  {
  private static readonly string path = ConfigurationManager.AppSettings["DAL"];
  /// <summary>
  /// 创建对象或从缓存获取
  /// </summary>
  public static object CreateObject(string path, string CacheKey)
  {
   object objType = DataCache.GetCache(CacheKey);//从缓存读取
   if (objType == null)
   {
    try
    {
     //Assembly ass = new Assembly();
     objType = Assembly.Load(path).CreateInstance(CacheKey);//反射创建
     DataCache.SetCache(CacheKey, objType);// 写入缓存
    }
    catch(System.Exception ex)
    {
     string str = ex.Message;//
     SmsSystem.Utility.SaveLog.SaveInfoToLog(str, "errorLog", "异常");
    }
   }
   return objType;
  }
  /// <summary>
  /// 不使用缓存,创建对象
  /// </summary>
  private static object CreateObjectNoCache(string path, string CacheKey)
  {
   try
   {
    object objType = Assembly.Load(path).CreateInstance(CacheKey);
    return objType;
   }
   catch//(System.Exception ex)
   {
    //string str=ex.Message;// 记录错误日志
    return null;
   }
  }
  /// <summary>
  /// 创建CustEmployee数据层接口
  /// </summary>
  public static SmsSystem.IDAL.ICustEmployee CreateCustEmployee()
  {
   string CacheKey = path + ".CustEmployee";
   object objType = CreateObject(path, CacheKey);
   return (ICustEmployee)objType;
  }
  ………………(其它数据层接口)
  }

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章