Использование AutoMapper с интерфейсом - PullRequest
0 голосов
/ 04 марта 2019

Я использую AutoMapper для отображения пары моих моделей серверов на модели пользовательского интерфейса.Я работаю над решением ядра Dotnet, действительно застрявшим в следующей ситуации

Модель сервера:

public interface IUserValue : IValue
{
    string EmailId { get; set; }
}

public class UserValue : IUserValue
{
    public string EmailId { get; set; }
}

public interface IUserProperty : IProperty
{
    string Name { get; set; }
}

public class UserProperty : IUserProperty 
{
    public string Name { get; set; }
}

public interface IUser 
{
    IUserValue Value { get; set; }
    IUserProperty Property { get; set; }
}

public class User 
{
    public IUserValue Value { get; set; }
    public IUserProperty Property { get; set; }
}

И модель пользовательского интерфейса что-то вроде

public class UserUIModel 
{
    public string Email { get; set; }
    public string Name { get; set; }
}

Я успешно сопоставилобъект пользовательского интерфейса из объекта сервера, используя следующий код

CreateMap<User, UserUIModel>()
        .ForMember(dest => 
            dest.Email, opts => 
                opts.MapFrom(src => 
                    src.Value.EmailId))
        .ForMember(dest => 
            dest.Name, opts => 
                opts.MapFrom(src => 
                    src.Property.Name)); 

Может кто-нибудь предложить мне, как я могу добиться обратного сопоставления, которое от UserUIModel для объекта пользователя?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Если кто-то все еще ищет, как это исправить, вот как, я понял это.

AutoMapper не создает объект типа интерфейса. В моем случае, если мы видим класс Пользователь , существуют свойства, но все они имеют интерфейс определенного типа.Таким образом, я должен был поставить какое-то ручное или стандартное поведение этих ссылок на типы интерфейса.То есть>

public class User 
{
   public IUserValue Value { get; set; } = new UserValue();
   public IUserProperty Property { get; set; } = new UserProperty();
}

И у меня это прекрасно работает.

0 голосов
/ 04 марта 2019

Используйте функцию ReverseMap() в конце вашей логики CreateMap, например:

CreateMap<User, UserUIModel>()
        .ForMember(dest => 
            dest.Email, opts => 
                opts.MapFrom(src => 
                    src.Value.EmailId))
        .ForMember(dest => 
            dest.Name, opts => 
                opts.MapFrom(src => 
                    src.Property.Name))
        .ReverseMap(); 
...