分享
 
 
 

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

王朝c#·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

项目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;

}

………………(其它数据层接口)

}

由这一个类,就可以获取需要用的数据访问层的实例,可是,我在使用过程中却总是抛出异常,[System.IO.FileNotFoundException] = {"未能加载文件或程序集“SmsSystem.SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。":"SmsSystem.SQLServerDAL"} ,说实话,对于C#这排错和调试我还手生,我百思不得其解,为什么会一用反射就异常呢,整个上去我去看反射的IPA,感觉我的用法没错误啊,况且,我看PetShop的例子就是这样差不多的写法,它为什么能用,下午调试了好久还是在出错,我发狠心去和petShop去对比,后来终于发现,它的dll的名字有些怪,和我的不同,它的都是如PetShop.SQLServerDAL.dll这样的名字,而我的就是个SQLServerDAL.dll,我感觉极有可能是这里有问题,因为在wb.config里我配置过

<appSettings>

<add key="DAL" value="SmsSystem.SQLServerDAL"/>

…………

</appSettings>

这样一个程序集,搞了好久,请教别人,结果弄清楚,是要项目的属性里设置程序集的名称,就可以生成SmsSystem.SQLServerDAL.dll这样的dll文件

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

类型“SmsSystem.BLL.CustEmployee”同时存在于“c:\Windows\Microsoft.net\Framework\v2.0.50727\Temporary ASP.NET Files

\smssystem\3358d7f2\16ba9bb7\assembly\dl3\7296d5df\40ded961_96d8c601\BLL.DLL”

和“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\smssystem\3358d7f2

\16ba9bb7\assembly\dl3\644d894c\4cf8840a_9ad8c601\SmsSystem.BLL.DLL”

中 G:\ASP.NET\SmsSystem\Default.aspx.cs 22

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有