日期:2014-05-17  浏览次数:21160 次

考试系统——C#反射机制+工厂模式+缓存机制遇到问题

一、问题及解决

 1、问题      

     考试系统用的是三层,抽象工厂+反射,调试系统的时候出现了这样一个错误:是在使用缓存处抛异常


并且查看返回的借口的值为null,然后就出现这个错误,接口没有创建成功。

 

2、代码如下:(缓存+反射)

/// <summary>
		/// 创建QuestionTypesDAL数据层接口。题型实体表
 
		/// </summary>
		public static ExamSystemV3.IDAL.IQuestionTypesDAL CreateQuestionTypesDAL()
		{

			string ClassNamespace = AssemblyPath +".QuestionTypesDAL";
			object objType=CreateObject(AssemblyPath,ClassNamespace);
			return (ExamSystemV3.IDAL.IQuestionTypesDAL)objType;
		}
       
//使用缓存
		private static object CreateObject(string AssemblyPath,string classNamespace)
		{			
			object objType = DataCache.GetCache(classNamespace);//从缓存中读取
			if (objType == null)
			{
				try
				{
				      //反射的创建				
					objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace);	DataCache.SetCache(classNamespace, objType);// 写入缓存
				}
				catch//(System.Exception ex)
				{
					//string str=ex.Message;// 记录错误日志
				}
			}
			return objType;
		}

    在使用这个类的时候总是抛异常,未能加载文件或程序集或它的某一个依赖项。


3、web.config文件

从网上搜索了一下,查看自己的web.config文件,

<!--数据访问层程序集名称 -->
    <add key="ExamSystemV3.SQLServerDAL" value="Maticsoft.SQLServerDAL" />    


4、SQLServerDAL配置如下:



项目的属性名称要和程序集的名称不一致导致了这个问题。


修改web.config文件后

<!--数据访问层程序集名称 -->
     <add key="DAL" value="ExamSystemV3.SQLServerDAL" />