为了完全分离/解耦,我在一个装配中实现了一个DAL,它只是通过post-build事件复制到网站BIN文件夹.然后,应用程序开始的网站加载该程序集System.Reflection.Assembly.LoadFile.再次,使用反射,我从该程序集中的类构造了几个实例.然后我在会话中存储对这些实例的引用(HttpContext.Current.Items)
后来,当我尝试将对象存储在会话中时,我无法将它们转换为自己的类型(最初尝试接口,但是为了调试尝试转换为他们自己的类型),得到此错误:
[A]DAL_QSYSCamper.NHibernateSessionBuilder cannot be cast to [B]
DAL_QSYSCamper.NHibernateSessionBuilder. Type A originates from 'DAL_QSYSCamper,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'Default' at
location 'C:\Users\myusername\AppData\Local\Temp\Temporary ASP.NET
Files\root\ad6e8bff\70fa2384\assembly\dl3\aaf7a5b0\84f01b09_b10acb01\DAL_QSYSCamper.DLL'.
Type B originates from 'DAL_QSYSCamper, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null' in the context 'LoadNeither' at
location 'C:\Users\myusername\Documents\Projects\QSYS\Deleteme\UI\MVCClient\bin\DAL_QSYSCa
mper.DLL'.
Run Code Online (Sandbox Code Playgroud)
这种情况正在发生,而VS-VS中的调试设法停止进入源DAL项目,即使我已从程序集中加载并且项目未被网站项目重新引用(它们都在解决方案中).
我确实理解错误,但我不明白如何以及为什么从两个位置使用/加载程序集 - 我只从文件中加载一次,并且没有参考项目.
应该提一下,我也使用Windsor进行DI.尝试从会话中提取对象的对象是A)来自该DAL程序集的类; B)由Windsor注入网站课程.我将努力为这个问题添加一些示例代码,但是想要把它放在外面,以防我明白我做错了什么.