public 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 {} } return objType; }在反射创建实例的时候。提示 ------------------未能加载文件或程序集“database.SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件..
在项目中。AssemblyPath 加载的位置 是 database.SQLServerDAL。而如果只是简单的创建了类库之后,它默认的命名空间不带有databse. 所以还要再设置项目属性的命名空间为databse.SQLServerDAL.而且。所有在database中的项目。例如 BLL. IDAL.SQLServerDAL.Model 等也必须加上database.
为什么要写database吗那?
首先:我们在动软生成三层的时候,定义的命名空间是database;
那么命名空间和项目中文件夹的关系那?
我来描述一下。
database是我们在动软中添加的。我们把这些项目放在database(解决方案里的我们建立的一个文件夹)下。
而utility文件夹下的DBUtility类的命名空间就是DBUtility并不是 utility.DBUtility.正在这里可以看出。命名空间和文件夹的名称并不是一定有对应关系。
但: 例如 Web项目下的Default.aspx.cs文件。它的命名空间就是Web. 这里就可以看到。项目生成时,怎么分辨所有的类的引用那?根据其命名空间。所有就把文件夹路径
引入到命名空间。因为文件夹路径首先是唯一的,其实可以保证我们可以很快的找到它(以文件夹的形式)。
那么。在这里。动软既然已经添加其命名空间。只有两种方法:
1.CS文件中。把namespace 修改。去掉 database
2.针对项目---属性----命名空间。添加上 database(如果已经引用很多的话。建议使用这种方式)
------------------------------------------------------------------------------------------------------------------------------
命名空间和程序集
----------------------------------------------------------------------------------------------------------------------------------------
<appSettings> <!--<add key="DAL" value="database.SQLServerDAL"/> 如果值为database的命名空间,则必须在 SQLServerDAL中命名空间加上 database--> <add key="DAL" value="database.SQLServerDAL"/> <add key="connStr" value="server=server;database=WaterMananger;uid=sa;pwd=123123"/> </appSettings>