AutoMapper ConvertUsing не вызывается - PullRequest
0 голосов
/ 26 августа 2018

Я хочу преобразовать два свойства базовых классов, используя ConvertUsing, но он не вызывается

Базовые классы

public abstract class BaseDadoMestreViewModel
{
    public DateTime UltimaAtualizacao { get; set; }
    public bool Excluido { get; set; }
    public bool Ativo { get; set; }
}

public abstract class BaseDadoMestre<TEntity> : EntityCrud<TEntity> 
    where TEntity : class
{
    public DateTime UltimaAtualizacao { get; set; }
    public string MarcadoEliminacao { get; set; }
    public bool Desabilitado { get; set; }
}

Классы

public class CalendarioViewModel: BaseDadoMestreViewModel
{
    public DateTime Data { get; set; }
}

public class CalendarioDTO: BaseDadoMestre<CalendarioDTO>
{
    public DateTime Data { get; set; }
}

ITypeConverter

public class BaseConverter<TEntity> : 
    ITypeConverter<BaseDadoMestre<TEntity>, BaseDadoMestreViewModel>,
    ITypeConverter<BaseDadoMestreViewModel, BaseDadoMestre<TEntity>> 
    where TEntity : BaseDadoMestre<TEntity>
{
    public BaseDadoMestreViewModel Convert(BaseDadoMestre<TEntity> source, BaseDadoMestreViewModel destination, ResolutionContext context)
    {
        destination.Excluido = (source.MarcadoEliminacao== "X");
        destination.Ativo = !source.Desabilitado;

        return destination;
    }

    public BaseDadoMestre<TEntity> Convert(BaseDadoMestreViewModel source, BaseDadoMestre<TEntity> destination, ResolutionContext context)
    {
        destination.MarcadoEliminacao = (source.Excluido ? null : "X");
        destination.Desabilitado = !source.Ativo;

        return destination;
    }
}

И, наконец, моя карта:

CreateMap(typeof(BaseDadoMestre<>), typeof(BaseDadoMestreViewModel)).ConvertUsing(typeof(BaseConverter<>));
CreateMap(typeof(BaseDadoMestreViewModel), typeof(BaseDadoMestre<>)).ConvertUsing(typeof(BaseConverter<>));
CreateMap<CalendarioDTO, CalendarioViewModel>()

Когда я запускаю команду отображения, ConvertUsing не вызывается.

mapper.Map<CalendarioViewModel>(new CalendarioDTO() { MarcadoEliminacao = "X", Desabilitado = true });

1 Ответ

0 голосов
/ 26 августа 2018

Начиная с документов Automapper, вы должны либо указать наследование при создании отображения для базовых классов, либо из производных.

Проверьте это:

http://docs.automapper.org/en/stable/Mapping-inheritance.html

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...