Ошибка Spring.Net: PropertyAccessExceptions.Spring.Core.TypeMismatchException: невозможно преобразовать значение свойства - PullRequest
1 голос
/ 31 декабря 2011

У меня есть класс:

public GenericImplementation:IGeneric<ICar>
{
    public IDrive DriveImplementation {get;set;}
}

И интерфейс:

public interface IGeneric<ICar> 
{

}

public interface IDrive<T>
{
     void Drive(T);
}

И реализация:

public class Drive:IDrive<ICar>
{
   public void Drive(ICar car)
   {
   }
}

И класс, который использует IGeneric:

public class GenericUser:IUser
{
  public IGeneric GenericImplementation {get;set;}
}

Все классы существуют в пространстве имен машин.

В конфигурации spring.net у меня есть:

<object id="Drive" type="carnamespace.Drive, carnamespace"/>
<object id="GenericImplementation" type="carnamespace.GenericImplementation, carnamespace">
  <property name="DriveImplementation" ref="Drive"/>
</object>

<object id="GenUser" type="carnamespace.GenericUser, carnamespace">
  <property name="GenericImplementation" value="GenericImplementation"/>
</object>

Но я продолжаю получать эту ошибку:

PropertyAccessExceptionsException (1 errors); nested PropertyAccessExceptions are: 
[Spring.Core.TypeMismatchException: Cannot convert property value of type [carnamespace.GenericImplementation] to required type [carnamespace.IGeneric`1[[carnamespace.ICar, carnamespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]] for property 'GenericImplementation'., Inner Exception: Spring.Core.TypeMismatchException: 

Может кто-нибудь помочь мне понять, какое разрешение?

1 Ответ

1 голос
/ 01 января 2012

В вашей конфигурации есть один очевидный недостаток:

<!-- ... snip ... -->   
<object id="GenUser" type="carnamespace.GenericUser, carassembly"> <!-- assemblyname after comma -->
  <!-- 
  Use ref instead of value!
  <property name="GenericImplementation" value="GenericImplementation"/>
  -->
  <property name="GenericImplementation" ref="GenericImplementation"/>
</object>

Это дало мне PropertyAccessExceptions с вложенным TypeMismatchException тоже.

Мне было трудно воспроизвестиваша проблема, потому что ваш код не компилируется.Если это не решит вашу проблему, пожалуйста, отправьте пример кода компиляции.Также убедитесь, что вы можете по крайней мере построить свои объекты в коде, например:

public void ConstructFromCode()
{
    var drive = new Drive();
    var genImp = new GenericImplementation {DriveImplementation = drive};
    var genUser = new GenericUser {GenericImplementation = genImp};
}
...