2016-07-05 3 views
4

После обновления версии automapper с 4.2.1 до 5.0.0 у меня возникла ошибка компиляции, отсутствующая в SourceValue. Вот мой примерAutomapper 5.0.0 отсутствует SourceValue (пользовательские преобразователи)

public class DraftLayoutCellPropertiesConverter : ITypeConverter<DraftLayoutCell, DraftGamePeriodDraftLayoutViewModel> 
    { 
     public DraftGamePeriodDraftLayoutViewModel Convert(ResolutionContext context) 
     { 
      var input = context.SourceValue as DraftLayoutCell; 
      var result = new DraftGamePeriodDraftLayoutViewModel(); 

      if (input != null) 
      { 

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

ответ

-1

Как я могу видеть, ITypeConverter имеет следующее заявление:

public interface ITypeConverter<in TSource, out TDestination> 
{ 
    TDestination Convert(TSource source, ResolutionContext context); 
} 

И, похоже, вы неправильно реализовали этот интерфейс.

Как только вы внедрили его правильно, вы можете использовать параметр TSource source, чтобы получить к вам доступ SourceValue.

О вашем вопросе «Это лучший способ сделать пользовательские конверторы : if you need to use the custom конвертер», тогда вам определенно нужно реализовать интерфейс выше для него. Однако это зависит от вашего дела, и иногда вам может понадобиться использовать поставщика настраиваемых значений, который можно использовать как конвертер.

2

В Automapper 5 Интерфейс ITypeConverter изменился, вы должны обновить реализацию:

public class DraftLayoutCellPropertiesConverter : ITypeConverter<DraftLayoutCell, DraftGamePeriodDraftLayoutViewModel> 
{ 
    public DraftGamePeriodDraftLayoutViewModel Convert(DraftLayoutCell source, DraftGamePeriodDraftLayoutViewModel destination, ResolutionContext context) 
    { 
     var input = source; 
     ... 
    } 
} 
Смежные вопросы