学习三层模式中遇到未能加载文件或程序集“Adtion.DAL.SqlServer”……”的原因和解析

仿照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中这样子调用:

   public   static  Adtion.IDAL.IStaff_Unit CreateStaffUnit()
        
{
            
//获取程序集的路径
            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:

namespace  Adtion.DAL.SqlServer
{
    
class Staff_Unit : IStaff_Unit
    
{
               
    }

}

也会报错:未能加载文件或程序集“Adtion.DAL.SqlServer”……”,因为如上图(第二个图)配置,这时你真正的程序集为"SqlSeverDAL",而不是配置文件中<add key="WebDAL" value="Adtion.DAL.SqlServer"/>的 Adtion.DAL.SqlServer。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值