Spring.Net 2, ошибка NHibernate 4 "Не удалось загрузить тип из строкового значения" Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate "."

Я пытаюсь обновить проект с Spring.Net 1.3.2, NHibernate 3.2 до Spring.Net 2, NHibernate 4.

Я получаю сообщение об ошибке "Не удалось загрузить тип из строкового значения" Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate "." Когда я пытаюсь бежать.

Мой журнал показывает:

System.Configuration.ConfigurationErrorsException: Error creating context 'spring.root': Could not load type from string value 'Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate'. ---> Spring.Objects.Factory.ObjectCreationException: Error thrown by a dependency of object 'transactionAdvisor' defined in 'file [C:\Users\...\Project.Web\Config\transaction.aop.xml] line 7' : Initialization of object failed : Cannot resolve type [Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate] for object with name 'transactionManager' defined in file [C:\Users\...\Project.Web\Config\hibernate.cfg.xml] line 45
 while resolving 'TransactionInterceptor' to 'transactionInterceptor' defined in 'file [C:\Users\...\Project.Web\Config\transaction.aop.xml] line 12' ---> Spring.Core.CannotLoadObjectTypeException: Cannot resolve type [Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate] for object with name 'transactionManager' defined in file [C:\Users\...\Project.Web\Config\hibernate.cfg.xml] line 45 ---> System.TypeLoadException: Could not load type from string value 'Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate'.
   at Spring.Core.TypeResolution.TypeResolver.Resolve(String typeName) in c:\_prj\spring-net\src\Spring\Spring.Core\Core\TypeResolution\TypeResolver.cs:line 81

Если я просто открою файл cs и создаю Spring.Data.NHibernate.LocalSessionFactoryObject, он выглядит хорошо, и пространство имен является правильным. Я изменил ссылки из-за изменения версии. Вот что у меня сейчас:

transaction.aop.xml

  <object id="transactionAdvisor" type="Spring.Transaction.Interceptor.TransactionAttributeSourceAdvisor, Spring.Data">
        <property name="TransactionInterceptor" ref="transactionInterceptor"/>
  </object>

  <!-- Transaction Interceptor -->
  <object id="transactionInterceptor" type="Spring.Transaction.Interceptor.TransactionInterceptor, Spring.Data">
        <property name="TransactionManager" ref="transactionManager"/>
        <property name="TransactionAttributeSource" ref="attributeTransactionAttributeSource"/>
  </object>

  <object id="attributeTransactionAttributeSource" type="Spring.Transaction.Interceptor.AttributesTransactionAttributeSource, Spring.Data">
  </object>

hibernate.cfg.xml

<object id="placeholder_db_settings" type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
    <property name="ConfigSections" value="databaseSettings,appSettings,emailSettings"/>
</object>

<db:provider id="DbProvider" provider="SqlServer-2.0" connectionString="Data Source=${db.datasource};Database=${db.database};User ID=${db.user};Password=${db.password};Connect Timeout=${db.connectTimeout}"/>

<object id="hibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate">
    <property name="DbProvider" ref="DbProvider"/>
    <property name="MappingAssemblies">
        <list>
            <value>IBB.BusinessNet.Services</value>
        </list>
    </property>
    <property name="HibernateProperties">
        <dictionary>
            <entry key-ref="connection.provider" value-ref="NHibernate.Connection.DriverConnectionProvider"/>
            <entry key-ref="show_sql" value-ref="false"/>
            <entry key-ref="dialect" value-ref="NHibernate.Dialect.MsSql2008Dialect"/>
            <entry key-ref="connection.driver_class" value-ref="NHibernate.Driver.SqlClientDriver"/>
            <entry key-ref="connection.pool_size" value-ref="10"/>
            <entry key-ref="query.substitutions" value-ref="true 1, false 0, yes 'Y', no 'N'"/>
            <entry key-ref="use_outer_join" value-ref="true"/>
            <entry key-ref="command_timeout" value-ref="840" />
            <entry key-ref="cache.provider_class" value-ref="NHibernate.Caches.SysCache2.SysCacheProvider,NHibernate.Caches.SysCache2" />
        </dictionary>
    </property>
    <property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>

<object id="transactionManager" type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate">
    <property name="DbProvider" ref="DbProvider"/>
    <property name="SessionFactory" ref="hibernateSessionFactory"/>
</object>

<object id="MyHibernateTemplate" type="Spring.Data.NHibernate.Generic.HibernateTemplate">
    <property name="SessionFactory" ref="hibernateSessionFactory" />
    <property name="TemplateFlushMode" value="Auto" />
    <property name="AllowCreate" value="true" />
    <property name="CacheQueries" value="true" />
</object>

<object id="HibernateTemplate" type="Spring.Data.NHibernate.HibernateTemplate">
    <property name="SessionFactory" ref="hibernateSessionFactory" />
    <property name="TemplateFlushMode" value="Auto" />
    <property name="AllowCreate" value="true" />
    <property name="CacheQueries" value="true" />
</object>

Конечно, все продезинфицировано и обрезано, чтобы уменьшить пространство. Я не изменил отображаемые файлы hbm, потому что ничего не сказал, что должен.

Я выбил Spring-логинг в DEBUG, исправил там несколько проблем. Изменение NHibernate на DEBUG не добавляет никаких журналов, потому что это не так далеко. Весна загружает все остальное нормально. Hibernate.cfg.xml выводит сообщения DEBUG с "Игнорированием сбоя загрузки класса объекта для объекта X", все из которых говорят "Не удалось загрузить тип из строкового значения". Первая ОШИБКА - это "GetObjectInternal: ошибка при получении объекта actionManager".

Я часами бился головой о стену, пытаясь понять, почему. Я знаю, что есть люди, которые понимают это лучше меня и могут указать мне правильное направление, так что вот мой призыв о помощи.

1 ответ

Решение

Бах, я все еще хочу использовать пространство имен, а не имя сборки. 2 строки в hibernate.cfg.xml должны быть именами DLL.

<object id="hibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate4">

...

<object id="transactionManager" type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate4">
Другие вопросы по тегам