我正在尝试运行一些集成测试并使用它:
public class ServiceLocatorInitializer
{
public static void Init()
{
IWindsorContainer container = new WindsorContainer();
container.Register(
Component
.For(typeof(IEntityDuplicateChecker))
.ImplementedBy(typeof(EntityDuplicateChecker))
.Named("entityDuplicateChecker"));
container.Register(
Component.For(typeof(ISessionFactoryKeyProvider))
.ImplementedBy(typeof(DefaultSessionFactoryKeyProvider))
.Named("sessionFactoryKeyProvider"));
ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));
}
}
加上这个:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
<property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
<property name="connection.connection_string">Data Source=:memory:;Version=3;New=True;</property>
<property name="connection.release_mode">on_close</property>
<property name="show_sql">true</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
</session-factory>
</hibernate-configuration>
我引用了Castle.Windsor版本3.1.0.0,但是得到了这个错误:
无法加载文件或程序集'Castle.Windsor,Version = 2.5.1.0, Culture = neutral,PublicKeyToken = 407dd0808d44fbdc'或其中一个 依赖。定位程序集的清单定义没有 匹配程序集引用。 (HRESULT异常:0x80131040)
不确定原因是什么以及如何克服这个问题?感谢。
答案 0 :(得分:3)
WindsorServiceLocator是针对较早版本的Castle构建的,尚未更新。
您需要在测试项目的App.Config中添加BindingRedirect,您应该可以通过在visual studio中打开Nuget Package Manager控制台来添加它们,选择测试项目并运行
Add-BindingRedirect
检查App.Config,您现在应该具有程序集的绑定重定向。
答案 1 :(得分:1)
NHibernate.ByteCode.Castle依赖于Castle,因为它使用DynamicProxy作为其代理工厂。 NHibernate 3.2解决了这个问题,它有自己的代理工厂,并且不依赖于Castle。如果可能,将NHibernate升级到至少3.2并从nhibernate配置文件中删除proxyfactory配置。