使用的反射机制时遇到的问题呢
中药常识 2021年09月06日 浏览:4 次
项目DALFactory是采用工厂模式设计的,设计模式的书我也曾看过java的设计模式,理解也不太深刻,但对工厂模式还是较为熟悉,使用它可以根据需求返回不同的实例对象,在DALFactory项目中使用反射机制来实现依赖注入,当然,它的实现还是没有java中的spring那样灵活,强大,部分代码如下:
// <summary>
/// 抽象工厂模式创建DAL。
/// nfig 需要加入配置:(利用工厂模式+反射机制+缓存机制,实现动态创建不同的数据层对象接口)
/// DataCache类在导出代码的文件夹里
/// 可以把所有DAL类的创建放在这个DataAccess类里
/// <appSettings>
/// <add key=\"DAL\" value=\"LServerDAL\" /> (这里的命名空间根据实际情况更改为自己项目的命名空间)
/// </appSettings>
/// </summary>
public sealed class DataAccess
{
private static readonly string path = pSettings[\"DAL\"];
/// <summary>
/// 创建对象或从缓存获取
/// </summary>
public static object CreateObject(string path, string CacheKey)
{
object objType = tCache(CacheKey);//从缓存读取
if (objType == null)
{
try
{
//Assembly ass = new Assembly();
objType = ad(path).CreateInstance(CacheKey);//反射创建
tCache(CacheKey, objType);// 写入缓存
}
catch(ception ex)
{
string str = ssage;//
veInfoToLog(str, \"errorLog\", \"异常\");
}
}
return objType;
}
/// <summary>
/// 不使用缓存,创建对象
/// </summary>
private static object CreateObjectNoCache(string path, string CacheKey)
{
try
{
object objType = ad(path).CreateInstance(CacheKey);
return objType;
}
catch//(ception ex)
{
//string str=ssage;// 记录错误日志
return null;
}
}
/// <summary>
/// 创建CustEmployee数据层接口
/// </summary>
public static ustEmployee CreateCustEmployee()
{
string CacheKey = path + \".CustEmployee\";
object objType = CreateObject(path, CacheKey);
return (ICustEmployee)objType;
}
………………(其它数据层接口)
}
由这一个类,就可以获取需要用的数据访问层的实例,可是,我在使用过程中却总是抛出异常,[leNotFoundException] = {\"未能加载文件或程序集“LServerDAL”或它的某一个依赖项。系统找不到指定的文件。\":\"LServerDAL\"} ,说实话,对于C#这排错和调试我还手生,我百思不得其解,为什么会一用反射就异常呢,整个上去我去看反射的IPA,感觉我的用法没错误啊,况且,我看PetShop的例子就是这样差不多的写法,它为什么能用,下午调试了好久还是在出错,我发狠心去和petShop去对比,后来终于发现,它的dll的名字有些怪,和我的不同,它的都是如l这样的名字,而我的就是个l,我感觉极有可能是这里有问题,因为在nfig里我配置过
<appSettings>
<add key=\"DAL\" value=\"LServerDAL\"/>
…………
</appSettings>
这样一个程序集,搞了好久,请教别人,结果弄清楚,是要项目的属性里设置程序集的名称,就可以生成l这样的dll文件
设置,重新生成 ,又出了一点问题,
类型“stEmployee”同时存在于“c:\\WINDOWS\\\\Framework\\v2.0.50727\\Temporary Files
从今年起 \\smssystem\\3358d7f2\\16ba9bb7\\assembly\\dl3\\7296d5df\\40ded961_96d8c601\\L”
和“c:\\WINDOWS\\\\Framework\\v2.0.50727\\Temporary Files\\smssystem\\3358d7f2
\\16ba9bb7\\assembly\\dl3\\644d894c\\4cf8840a_9ad8c601\\L”
中 G:\\\\SmsSystem\\ 22
我仔细一看,原来在web项目的bin下面,原来的l还在,又多了个l,哈哈,vs2005又一个没有自动删除掉的多余文件,昨天是一个项目文件删除掉后,在相应的删除文件竟然没删除,不过,我把它手工删除掉,OK,一切正常,还是感谢告诉我怎么样改项目的Assembly name的朋友,不然我竟然找好久也不晓得怎么生成带上命名空间的dll。 查看本文来源
银川治疗男科医院哪家好男性脱发的预防护理
梧州治疗白癜风哪家好

- 上一篇: 使用来扩展功能牛
- 下一篇 使用的托管扩展针对窗体编的
-
中医介绍维生素能否直接抹在脸上
2019-07-16
-
白饭树根的功效与作用
2019-07-15
-
哪些食物让咳嗽好得快呢
2019-07-13
-
准妈妈饮食两攻略吃出聪明宝宝
2019-07-12
-
三天3款食谱3个身材
2019-07-07
-
适合女性的五种补血方法
2019-07-06