在界面上使用AutoMapper

时间:2019-03-04 08:30:14

标签: .net-core automapper

我正在使用AutoMapper将我的服务器模型对映射到UI模型。我正在开发一种真正陷入以下情况的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; }
}

UI类似于

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

我已经使用以下代码成功地从服务器对象映射了UI对象

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到User对象的反向映射吗?

2 个答案:

答案 0 :(得分:0)

在CreateMap逻辑的末尾使用ReverseMap()函数,如下所示:

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(); 

答案 1 :(得分:0)

如果有人仍在寻找如何解决此问题,我已经弄清楚了。

AutoMapper不会创建接口类型的对象,在我的情况下,如果我们可以看到 User 类,则有属性,但是所有类型都是某种Interfaces。因此,我不得不对这些接口类型引用进行一些手动或默认操作。那是>

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

对我来说很好。