Automapper,将映射到接口

11
我将使用automapper (用于.net 3.5)进行翻译。下面是一个示例,以说明我的目的:
我想要将一个A对象映射到一个B对象。类定义:
class A
{
    public I1 MyI { get; set; }

}
class B
{        
    public I2 MyI { get; set; }
}

interface I1
{
    string StringProp1 { get; }
}
interface I2
{
    string StringProp1 { get; }
}

class CA : I1
{
    public string StringProp1
    {
        get { return "CA String"; }
    }
    public string StringProp2 { get; set; }
}
class CB : I2
{
    public string StringProp1
    {
        get { return "CB String"; }
    }
    public string StringProp2 { get; set; }
}

映射代码:
        A a = new A()
        {
            MyI = new CA()
        };
        // Mapper.CreateMap ...?
        B b = Mapper.Map<A,B>(a);

我希望生成的对象 b 能够被 CB 的一个实例填充。 因此,AutoMapper 需要知道 A 映射到 B,CA 映射到 CB,并在创建 B 时将其 MyI 属性填充为 CB。 我应该如何指定这个映射?

1
老实说,使用短变量名会使代码难以阅读。 - carloswm85
1个回答

20

类似这样的:

class Program
{
    static void Main(string[] args)
    {
        Mapper.Initialize(x => x.AddProfile<MappingProfile>());

        var a = new A()
        {
            MyI = new CA()
            {
                StringProp2 = "sp2"
            }
        };

        var b = Mapper.Map<A, B>(a);

        Console.WriteLine("a.MyI.StringProp1: " + a.MyI.StringProp1);
        Console.WriteLine("b.MyI.StringProp1: " + b.MyI.StringProp1);

    }
}

AutoMapper 2.0.0

public class MappingProfile : Profile
{
    protected override void Configure()
    {
        CreateMap<CA, CB>();
        CreateMap<CA, I2>().As<CB>();                                                                       
        CreateMap<A, B>();
    }
}

AutoMapper 1.1.0.188 (.Net 3.5)

public class MappingProfile : Profile
{
    protected override void Configure()
    {
        CreateMap<CA, CB>();

        CreateMap<CA, I2>()
            .ConstructUsing(Mapper.Map<CA, CB>)
            ;

        CreateMap<A, B>();
    }
}

谢谢...不幸的是,我使用的automapper版本似乎不支持As方法。正如我所提到的,我正在使用3.5版本。你知道相应的代码是什么吗? - Manolo
@tyronecopex 这是哪个版本的AutoMapper? - Martijn B
@tyronecopex 已经找到了。你可能正在使用1.1.0.188。请查看我的更新答案。 - Martijn B
RTD链接:https://docs.automapper.org/en/stable/Mapping-inheritance.html#as - mlhDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接