仿照PetShop学习三层模式总结:
新建如下五个项目,他们的依赖关系如下:
1. BLL 依赖于---Model, IDAL, DALFactory
2. DALFactory 依赖于---IDAL, System.configuration
3. IDAL 依赖于---Model
4. DAL 依赖于---DBUtility, Model,IDAL
5. Model 依赖于---无
6. DBUtility 依赖于---System.configuration
7. 一个网站(文件系统)
也就是说要要这样子引用:BLL项目引用Model,IDAL,DALFactory这几个项目
在新建项目时,项目属性中的程序集名称和默认命名空间要指定为要调用的命名空间,如在项目DAL中,右键点属性:
作如下设置:
才可以找到程序集,设置成下面的形式:
才能在DataFactory中这样子调用:
... {
//获取程序集的路径
string path = ConfigurationManager.AppSettings["WebDAL"];//(获取网站Web.config中<appSettings>配置节中名为“WebDAL”那一项的值)
// 获取要实例化的类的完整名字:命名空间+ ". "+ 类名(注意,因为我们设置了命名空间和程序集都是Adtion.DAL.SqlServer(见上图),所以才使用 程序集+ ". "+ 类名 )
string className=path +".Staff_Unit";
//利用反射技术,动态加载指定类型(Assembly.load(path).CreateInstance (className)方法加载名为path的程序集,并创建在该程序集下在名字叫className的类的实例)
return (Adtion.IDAL.IStaff_Unit)Assembly.Load(path).CreateInstance (className);
}
其中Web.config中<appSettings>配置节中的配置如下:
<add key="WebDAL" value="Adtion.DAL.SqlServer"/>
如果大家配置好项目属性如图为所示,自然在执行Assembly.Load
(path).CreateInstance (className)方法是能执行通过:找到名为Adtion.DAL.SqlServer的程序集,实例化其中名为Adtion.DAL.SqlServer.Staff_Unit的类;
否则,会弹出“未能加载文件或程序集“Adtion.DAL.SqlServer”……”的错误信息
注:比如你的项目属性配置如下
虽然你的 Staff_Unit 类是这样写在命名空间Adtion.DAL.SqlServer:
... {
class Staff_Unit : IStaff_Unit
...{
}
}
也会报错:未能加载文件或程序集“Adtion.DAL.SqlServer”……”,因为如上图(第二个图)配置,这时你真正的程序集为"SqlSeverDAL",而不是配置文件中<add key="WebDAL" value="Adtion.DAL.SqlServer"/>的 Adtion.DAL.SqlServer。