C# Spring.Core.TypeMismatchException:无法将类型为[…]的属性转换为所需类型[…]

C# Spring.Core.TypeMismatchException:无法将类型为[…]的属性转换为所需类型[…],c#,nhibernate,spring.net,C#,Nhibernate,Spring.net,我的问题是,在我对正在进行的项目进行tfs更新之后,我无法再进行任何测试。 在更新之前,它起作用了,但现在我每次运行testclass中的ContextRegistry.GetContext()方法时都会得到一个Spring.Core.typemischException MyProjectDao上唯一的更改是其方法中的更改,并添加了属性。并且向SpringContext.xml添加了一个服务 这是我得到的例外: System.Configuration.ConfigurationErrorsE

我的问题是,在我对正在进行的项目进行tfs更新之后,我无法再进行任何测试。 在更新之前,它起作用了,但现在我每次运行testclass中的
ContextRegistry.GetContext()
方法时都会得到一个
Spring.Core.typemischException

MyProjectDao上唯一的更改是其方法中的更改,并添加了属性。并且向SpringContext.xml添加了一个服务

这是我得到的例外:

System.Configuration.ConfigurationErrorsException: System.Configuration.ConfigurationErrorsException:创建错误 上下文“spring.root”:PropertyAccessExceptionsExceptionsException(1个错误); 嵌套的PropertyAccessException是:

[Spring.Core.TypeMismatchException:无法转换的属性值 键入[CompositionOpProxy_f81c875c2f994f88bb773f5743050b67]至 属性的必需类型[MyProject.Dao.MyProjectDao] “MyProjectDao.”,内部异常: Spring.Core.TypeMismatchException:无法转换属性值 类型为[CompositionOpProxy_F81C875C2F994F88BB773F57430B67]至 属性的必需类型[MyProject.Dao.MyProjectDao] “MyProjectDao”。 在Spring.Core.TypeConversion.TypeConversionUtils.ConvertValueIfEssential(类型 中的requiredType、对象newValue、字符串propertyName) f:\bambol 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行“:设置属性值时出错: PropertyAccessExceptionsExceptionsException(1个错误);嵌套 PropertyAccessException包括: [Spring.Core.TypeMismatchException:无法将[CompositionOpProxy_f81c875c2f994f88bb773f5743050b67]类型的属性值转换为 属性的必需类型[MyProject.Dao.MyProjectDao] “MyProjectDao.”,内部异常:Spring.Core.typemischException: 无法转换类型的属性值 [Composition Opproxy_f81c875c2f994f88bb773f5743050b67]符合要求 为属性“MyProjectDao”键入[MyProject.Dao.MyProjectDao]。位于 Spring.Core.TypeConversion.TypeConversionUtils.ConvertValueIfEssential(类型 中的requiredType、对象newValue、字符串propertyName) f:\bambol home\xml data\build dir\SPRNET-RELEASE-JOB1\src\Spring\Spring.Core\Core\TypeConversion\TypeConversionUtils.cs:MyProject 211.]-->Spring.Objects.propertyaccessExceptionsExceptionsExceptionsException:propertyaccessExceptionsExceptionsExceptionsException(1个错误);嵌套 PropertyAccessException为:[Spring.Core.TypeMismatchException: 无法转换类型的属性值 [Composition Opproxy_f81c875c2f994f88bb773f5743050b67]符合要求 为属性“MyProjectDao”键入[MyProject.Dao.MyProjectDao]。, 内部异常:Spring.Core.typemischException:无法 转换类型的属性值 [Composition Opproxy_f81c875c2f994f88bb773f5743050b67]符合要求 为属性“MyProjectDao”键入[MyProject.Dao.MyProjectDao]。 在Spring.Core.TypeConversion.TypeConversionUtils.ConvertValueIfEssential(类型 中的requiredType、对象newValue、字符串propertyName) f:\bambol 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>

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

如果使用该类,请将其更改为接口

将MyProjectService类中的属性更改为:

public MyProjectDao MyProjectDao { get; set; }


这很可能就是问题所在。我猜问题是从@Lyndon添加了
[Transaction..]
属性开始的;这导致spring为
MyProjectDao
类型的接口创建一个基于合成的代理,而不是简单地使用类型
MyProjectDao
本身。
public IMyProjectDao MyProjectDao { get; set; }