【问题标题】:Spring.Core.TypeMismatchException: Cannot convert property of type [...] to required type [...]Spring.Core.TypeMismatchException:无法将类型 [...] 的属性转换为所需类型 [...]
【发布时间】:2013-05-23 10:13:51
【问题描述】:

我的问题是,在对我正在处理的项目进行 tfs 更新后,我无法再进行任何测试。 在更新之前它有效,但现在我每次在我的测试类的Init() 方法中运行ContextRegistry.GetContext() 方法时都会得到一个Spring.Core.TypeMismatchException

MyProjectDao 的唯一变化是其方法的变化和添加的属性。并且在 SpringContext.xml 中添加了一个服务。

这是我得到的例外:

System.Configuration.ConfigurationErrorsException: System.Configuration.ConfigurationErrorsException:创建错误 上下文'spring.root':PropertyAccessExceptionsException(1 个错误); 嵌套的 PropertyAccessExceptions 是:

[Spring.Core.TypeMismatchException:无法转换的属性值 键入 [CompositionAopProxy_f81c875c2f994f88bb773f5743050b67] 到 属性所需的类型 [MyProject.Dao.MyProjectDao] 'MyProjectDao'.,内部异常: Spring.Core.TypeMismatchException:无法转换属性值 [CompositionAopProxy_f81c875c2f994f88bb773f5743050b67] 类型的 属性所需的类型 [MyProject.Dao.MyProjectDao] “我的项目”。 在 Spring.Core.TypeConversion.TypeConversionUtils.ConvertValueIfNecessary(类型 requiredType, Object newValue, String propertyName) in f:\bamboo-home\xml-data\build-dir\SPRNET-RELEASE-JOB1\src\Spring\Spring.Core\Core\TypeConversion\TypeConversionUtils.cs:MyProject 211.] ---> Spring.Objects.Factory.ObjectCreationException:创建在“文件”中定义的名称为“MyProjectService”的对象时出错 [C:\Projects\MyProject\MyProject.NET\test\MyProject.Service.Test\bin\Debug\SpringContext.xml] 第 147 行:设置属性值时出错: PropertyAccessExceptionsException(1 个错误);嵌套的 PropertyAccessExceptions 是: [Spring.Core.TypeMismatchException:无法将 [CompositionAopProxy_f81c875c2f994f88bb773f5743050b67] 类型的属性值转换为 属性所需的类型 [MyProject.Dao.MyProjectDao] 'MyProjectDao'.,内部异常:Spring.Core.TypeMismatchException: 无法转换类型的属性值 [CompositionAopProxy_f81c875c2f994f88bb773f5743050b67] 为必需 为属性“MyProjectDao”键入 [MyProject.Dao.MyProjectDao]。在 Spring.Core.TypeConversion.TypeConversionUtils.ConvertValueIfNecessary(类型 requiredType, Object newValue, String propertyName) in f:\bamboo-home\xml-data\build-dir\SPRNET-RELEASE-JOB1\src\Spring\Spring.Core\Core\TypeConversion\TypeConversionUtils.cs:MyProject 211.] ---> Spring.Objects.PropertyAccessExceptionsException:PropertyAccessExceptionsException(1 个错误);嵌套的 PropertyAccessExceptions 是:[Spring.Core.TypeMismatchException: 无法转换类型的属性值 [CompositionAopProxy_f81c875c2f994f88bb773f5743050b67] 为必需 为属性“MyProjectDao”键入 [MyProject.Dao.MyProjectDao]。, 内部异常:Spring.Core.TypeMismatchException:不能 转换类型的属性值 [CompositionAopProxy_f81c875c2f994f88bb773f5743050b67] 为必需 为属性“MyProjectDao”键入 [MyProject.Dao.MyProjectDao]。 在 Spring.Core.TypeConversion.TypeConversionUtils.ConvertValueIfNecessary(类型 requiredType, Object newValue, String propertyName) in f:\bamboo-home\xml-data\build-dir\SPRNET-RELEASE-JOB1\src\Spring\Spring.Core\Core\TypeConversion\TypeConversionUtils.cs:MyProject 211.].

MyProjectDao 类如下所示:

namespace MyProject.Dao
{
    [DataAccessObject]
    [Transaction(TransactionPropagation.Mandatory)]
    public class MyProjectDao : IMyProjectDao
    {
        public ISessionFactory SessionFactory { private get; set; }

        // ... Methods ... 
    }
}

IMyProjectDao 接口:

namespace MyProject.Dao
{
    public interface IMyProjectDao
    {
        // ... Methods ... 
    }
}

这是我的 SpringContext.xml 的一部分

<!-- ######################## -->
<!--            DAO           -->
<!-- ######################## -->

<object id="MyProjectDao" type="MyProject.Dao.MyProjectDao, MyProject">
    <property name="SessionFactory" ref="SessionFactory" />
</object>

<!-- ######################## -->
<!--          Service         -->
<!-- ######################## -->

<object id="MyProjectService" type="MyProject.Service.MyProjectService, MyProject">
    <property name="MyProjectDao"       ref="MyProjectDao" />
    <property name="PersistenceService" ref="PersistenceService" />
    <property name="DeletedObjectCache" ref="DeletedObjectCache" />
</object>

【问题讨论】:

    标签: c# nhibernate spring.net


    【解决方案1】:

    您是在为 MyProjectDao 属性使用 MyProjectService 中的接口“IMyProjectDao”还是使用“MyProjectDao”类。

    如果你使用类,把它改成接口。

    从以下位置更改 MyProjectService 类中的属性:

    public MyProjectDao MyProjectDao { get; set; }
    

    public IMyProjectDao MyProjectDao { get; set; }
    

    【讨论】:

    • 这很可能是问题所在。我猜当@Lyndon 添加了[Transaction ..] 属性时问题就开始了;这会导致 spring 为 MyProjectDao 类型的接口创建基于组合的代理,而不是简单地使用类型 MyProjectDao 本身。
    猜你喜欢
    • 2012-01-31
    • 2021-06-13
    • 2021-07-08
    • 1970-01-01
    • 2017-02-23
    • 2017-05-12
    • 2018-08-21
    • 2017-04-21
    • 2021-01-23
    相关资源
    最近更新 更多