我刚刚掌握了NHibernate的基础知识,在重构我的数据访问和域层时,我认为我可能会变得很可爱并开始使用数据访问层的依赖注入。我们来这里进行单元测试!
我认为既然NHibernate使用了大量的Castle dlls,我也可以使用Castle Windsor作为DI容器。正如我正在启动应用程序以查看它是否一切正常,我得到了一个dll参考问题。
由于我使用的是 NHibernate 2.1.2.4000 ,因此我已经引用了 Castle.Core 1.1.0.0 。但是,我使用的 Castle Windsor dll的版本( 2.1.0.0 )告诉它想要 Castle.Core 1.2.0.0 。
我对这个疯狂的开源类库malarkey不熟悉。一般来说,我如何预先找出dll依赖项是什么,以及如何找到使用 Castle.Core 1.1.0.0 的Castle.Windsor版本,这是我的已经有了?
或者,我如何知道NHibernate是否可以与 Castle.Core 1.2.0.0 一起使用,或者它是否会破坏?
感谢您的帮助。
大卫
答案 0 :(得分:2)
有一个新的开源项目Refix,它是为帮助解决这个问题而创建的。
它有以下几种方式:
它“反映”您解决方案中的所有项目如果有一组可以由所有项目“同意”的共同依赖项。如果是这样,它可以相应地更新您的项目文件。
如果没有,但某些版本的dll与其他版本兼容,它可以使用适当的程序集重定向自动更新配置文件。
它还可以作为所有各种程序集及其版本的中央存储库。
这个项目是新的,只有alpha版,但它确实很实用,绝对值得一看。此外,作者(我个人认识)非常热衷于获得有关该项目的反馈和想法。
非常值得一看恕我直言。
答案 1 :(得分:1)
短期解决方案是使用装配绑定重定向。
更好的选择是使用你想要的Castle版本从源代码编译NHibernate。
答案 2 :(得分:0)
我不认为NH可以引用Castle.Core,你宁愿有相反的情况:作为城堡项目的一部分的活动记录需要那个版本的NH。为了使引用保持一致,您可以尝试从castle系列中下载所有程序集以使它们与最新版本匹配(在您的情况下为Windsor)。这将需要一些回归测试和可能的构建问题。 或者,您可以在不需要特定Castle.Core版本的情况下重新编译Windsor,但鉴于版本差异很大,您可能会遇到多个兼容性问题,甚至因API更改而构建问题。
答案 3 :(得分:0)
嗯......您可以处理版本问题... 或您可以将它们全部安装在GAC中并停止担心。
这使得安装过程的可移植性降低,但应该可以解决问题。
答案 4 :(得分:0)
这可以使用程序集绑定重定向;有关详细信息,请参阅here。
答案 5 :(得分:0)
显然没有什么可以肯定的,所以我已经将NHibernate转换为使用Linfu而不是Castle来获取动态代理,现在我可以自由地在我的解决方案中拥有更新的Castle.Core版本
[编辑:当我添加这个时,我没有看到回复,这也可以解决问题。]