问题
解决方案
第一次遇到错误时看了一眼下面的“温馨提示”:使用相对路径时,请确保当前目录是正确的;于是在这条提示的关怀下,果断选择了一个关于dll路径问题的博客扎了进去,然后顺利解决(我的问题是没有设置UI层下bin文件夹需要的路径为待引用程序集的路径引起的)。
后来总结了下出现这个问题的原因:一、反射的调用代码书写错误;二、反射的加载路径设置不正确。
代码错误
反射的调用应该是:Assembly.Load("程序集").CreateInstance("命名空间类")
代码举例
<span style="font-family:KaiTi_GB2312;font-size:24px;">Public Class LoginFactory
Private Shared ReadOnly AssemblyName As String = "DAL" '数据库程序集名称,命名空间DAL
Dim strDB As String = System.Configuration.ConfigurationSettings.AppSettings("DB")
Public Function CreateIUser() As LoginIUserInfo
Dim classname As String = "DAL" + "." + strDB + "LoginDAL" '需要实例化的D层的名称
Dim IUser As LoginIUserInfo
'CType 函数将返回表达式显示的转换为指定的数据类型、对象、结构、类或者接口后的结果
IUser = CType(Assembly.Load(AssemblyName).CreateInstance(classname), LoginIUserInfo) '返回LoginIUserInfo
Return IUser
End Function
End Class</span>
PS:上面代码来自我的博客《机房重构之七层登录》;其中的变量AssemblyName即为所谓的程序集;classname即为所谓的命名空间类
路径问题
因为反射的原理时需要加载程序集dll在UI层下的bin文件夹下的内容,所以在上面的代码书写问题中提到的程序集是需要读取UI层(有关UI层请参考我的另一篇博客《机房重构之七层登录》)文件夹bin中对应的dll;因此我们需要保证UI层bin文件夹下的路径有需要的程序集的路径才能让程序顺利运行。
总结
反射的原理除了上面提到的一点,其他的还是很陌生,后续学习跟进;一个错误,是一次痛苦,也是一次幸福。
感谢您的宝贵时间,祝生活愉快,谢谢!
—joker