0

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

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)

不知道是什么原因以及如何克服这个问题?谢谢。

4

2 回答 2

3

WindsorServiceLocator 是针对旧版本的 Castle 构建的,尚未更新。

您需要在测试项目的 App.Config 中添加 BindingRedirect,您应该可以通过在 Visual Studio 中打开 Nuget 包管理器控制台来添加它们,选择测试项目并运行

Add-BindingRedirect

检查 App.Config,您现在应该有程序集的绑定重定向。

于 2013-01-11T01:18:28.380 回答
1

NHibernate.ByteCode.Castle 依赖于 Castle,因为它使用 DynamicProxy 作为其代理工厂。NHibernate 3.2 解决了这个问题,它有自己的代理工厂,不依赖于 Castle。如果可能,将 NHibernate 升级到至少 3.2 并从您的 nhibernate 配置文件中删除 proxyfactory 配置。

于 2013-01-10T16:00:48.220 回答