SQLite + windsor.castle版本问题

时间:2013-01-10 15:24:48

标签: sqlite castle-windsor s#arp-architecture

我正在尝试运行一些集成测试并使用它:

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)

不确定原因是什么以及如何克服这个问题?感谢。

2 个答案:

答案 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配置。