Интерфейс ITypeConverter был изменен в AutoMapper 2.0 - PullRequest
13 голосов
/ 17 ноября 2011

Интерфейс ITypeConverter был изменен, чтобы иметь «Преобразование TDestination (контекст ResolutionContext)» вместо «Преобразование TDestination (источник TSource)» для метода Convert.

http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters

В моем коде теперь я получаю эту ошибку:

'BusinessFacade.Mappers.DecimalToNullableInt' не реализует элемент интерфейса 'AutoMapper.ITypeConverter.Convert (AutoMapper.ResolutionContext)'

Какой-нибудь хороший полный образец для нового картографа, как мои картографы?Я не хочу менять какой-либо код (или минимальный код) в моих проектах ...

Мой картограф

 public class DecimalToNullableInt : ITypeConverter<decimal, int?>
    {
        public int? Convert(decimal source)
        {
            if (source == 0)
                return null;
            return (int)source;
        }
    }

ОБНОВЛЕНИЕ

Интерфейс ITypeConverter был изменен, чтобы иметь «Преобразование TDestination (контекст ResolutionContext)» вместо «Преобразование TDestination (источник TSource)» для метода Convert.

документация устарела.Существует ITypeConverter, а также базовый удобный класс TypeConverter.TypeConverter скрывает ResolutionContext, а ITypeConverter представляет его.

http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters

https://github.com/AutoMapper/AutoMapper/wiki/Custom-type-converters

http://groups.google.com/group/automapper-users/browse_thread/thread/6c523b95932f4747

1 Ответ

15 голосов
/ 17 ноября 2011

Вам нужно будет получить десятичное число из свойства ResolutionContext.SourceValue:

    public int? Convert(ResolutionContext context)
    {
        var d = (decimal)context.SourceValue;
        if (d == 0)
        {
            return null;
        }
        return (int) d;
    }
...