专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » java反射机制:使用C#的反射机制时遇到的问题 »正文

java反射机制:使用C#的反射机制时遇到的问题

来源: 发布时间:星期五, 2009年1月9日 浏览:38次 评论:0
  项目DALFactory是采用工厂模式设计设计模式书我也曾看过java设计模式理解也不太深刻但对工厂模式还是较为熟悉使用它可以根据需求返回区别例子对象在DALFactory项目中使用反射机制来实现依赖注入当然实现还是没有java中spring那样灵活强大部分代码如下:

// <summary>
/// 抽象工厂模式创建DAL
/// web.config 需要加入配置:(利用工厂模式+反射机制+缓存Cache机制,实现动态创建区别数据层对象接口)
/// DataCache类在导出代码文件夹里
/// 可以把所有DAL类创建放在这个DataAccess类里
/// <appSettings>
/// <add key="DAL" value="Sms.SQLServerDAL" /> (这里命名空间根据实际情况更改为自己项目命名空间)
/// </appSettings>
/// </summary>
public sealed DataAccess
{
private readonly path = ConfigurationManager.AppSettings["DAL"];
/// <summary>
/// 创建对象或从缓存Cache获取
/// </summary>
public object CreateObject( path, CacheKey)
{
 object objType = DataCache.GetCache(CacheKey);//从缓存Cache读取
  (objType null)
 {
  try
  {
   //Assembly ass = Assembly;
   objType = Assembly.Load(path).CreateInstance(CacheKey);//反射创建
   DataCache.SetCache(CacheKey, objType);// 写入缓存Cache
  }
  catch(.Exception ex)
  {
    str = ex.Message;//
   Sms.Utility.SaveLog.SaveInfoToLog(str, "errorLog", "异常");
  }
 }
  objType;
}
/// <summary>
/// 不使用缓存Cache,创建对象
/// </summary>
private object CreateObjectNoCache( path, CacheKey)
{
 try
 {
  object objType = Assembly.Load(path).CreateInstance(CacheKey);
   objType;
 }
 catch//(.Exception ex)
 {
  // str=ex.Message;// 记录日志
   null;
 }
}
/// <summary>
/// 创建CustEmployee数据层接口
/// </summary>
public Sms.IDAL.ICustEmployee CreateCustEmployee
{
  CacheKey = path + ".CustEmployee";
 object objType = CreateObject(path, CacheKey);
  (ICustEmployee)objType;
}
………………(其它数据层接口)
}
  由这个类就可以获取需要用数据访问层例子可是我在使用过程中却总是抛出异常[.IO.FileNotFoundException] = {"未能加载文件或集“Sms.SQLServerDAL”或它个依赖项系统找不到指定文件":"Sms.SQLServerDAL"} 说实话对于C#这排错和调试我还手生我百思不得其解为什么会用反射就异常呢整个上去我去看反射IPA感觉我使用方法没况且我看PetShop例子就是这样差不多写法它为什么能用下午调试了好久还是在出错我发狠心去和petShop去对比后来终于发现dll名字有些怪和我区别都是如PetShop.SQLServerDAL.dll这样名字而我就是个SQLServerDAL.dll我感觉极有可能是这里有问题在wb.config里我配置过

<appSettings>
<add key="DAL" value="Sms.SQLServerDAL"/>
…………
</appSettings>
  这样搞了好久请教别人结果弄清楚是要项目属性里设置名称就可以生成Sms.SQLServerDAL.dll这样dll文件

  

  设置重新生成 又出了点问题

  类型“Sms.BLL.CustEmployee”同时存在于“c:WINDOWSMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Files

  smssystem3358d7f216ba9bb7assemblydl37296d5df40ded961_96d8c601BLL.DLL”

  和“c:WINDOWSMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Filessmssystem3358d7f2

  16ba9bb7assemblydl3644d894c4cf8840a_9ad8c601Sms.BLL.DLL”

  中 G:ASP.NETSmsDefault.aspx.cs 22

  我仔细原来在web项目bin下面原来SQLServerDAL.dll还在又多了个Sms.SQLServerDAL.dll哈哈vs2005又个没有自动删除掉多余文件昨天是个项目文件AssemblyInfo.cs删除掉后在相应删除文件竟然没删除不过我把它手工删除掉OK,切正常还是感谢告诉我如何样改项目Assembly name朋友不然我竟然找好久也不晓得如何生成带上命名空间dll



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: