如何从源头包裹性能,解开目的地地图

问题描述 投票:0回答:1

我试图映射源的结构,其中一些属性被一个NonNull<T>通用型内包裹(从GraphQL.Conventions库)。

在实践中,我想用AutoMapper映射的结构:

public class SourceA
{
    public NonNull<SourceB> Sub { get; set; }

    public string Username { get; set; }
}

public class SourceB
{
    public NonNull<string> Address { get; set; }
}

为了这样的目的:

public class DestA
{
    public DestB Sub { get; set; }

    public string Username { get; set; }
}

public class DestB
{
    public string Address { get; set; }
}

这是我的设置:

var source = new NonNull<SourceA>(new SourceA
{
    Username = "Test user",
    Sub = new NonNull<SourceB>(new SourceB
    {
        Address = "Test Address"
    })
});

var mapper = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<SourceA, DestA>();
    cfg.CreateMap<NonNull<SourceA>, DestA>()
        .ConvertUsing((src, dst, ctx) =>
        {
            ctx.Mapper.Map(src.Value, dst);
            return dst;
        });
    cfg.CreateMap<SourceB, DestB>();
    cfg.CreateMap<NonNull<SourceB>, SourceB>()
        .ConvertUsing((src, dst, ctx) =>
        {
            ctx.Mapper.Map(src.Value, dst);
            return dst;
        });
}).CreateMapper();


var dest = mapper.Map<DestA>(source);

以上的设置是最接近我能得到,但它仍然抛出这个异常:

错误映射类型。

映射类型:源 - > DESTA映射Test.Program + SourceA - >映射Test.Program + DESTA

类型地图配置:SourceA - > DESTA MappingTest.Program + SourceA - > MappingTest.Program +德斯塔

目的地会员:子

任何人都知道一个简单的方法来做到这一点(记住,我应该能够自动生成使用T4模板映射配置,如果该事项的话)?

automapper
1个回答
0
投票

终于找到了一些作品。

var mapper = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<SourceA, DestA>();
    cfg.CreateMap<NonNull<SourceA>, DestA>().ConvertUsing((src, dst, ctx) => ctx.Mapper.Map<DestA>(src.Value));
    cfg.CreateMap<SourceB, DestB>();
    cfg.CreateMap<NonNull<SourceB>, DestB>().ConvertUsing((src, dst, ctx) => ctx.Mapper.Map<DestB>(src.Value));
}).CreateMapper();
© www.soinside.com 2019 - 2024. All rights reserved.