.net 自动Map器:Map后示例相同

lx0bsm1f  于 2022-12-14  发布在  .NET
关注(0)|答案(1)|浏览(132)

我尝试自动Map器,它是非常好的,但它是可能的Map两个OuterDto源到OuterModel目的地与相同的对象InnerDeto一样的代码?我怎么能做到这一点,dest1.Inner和dest2.Inner后,Map有相同的示例?据我所知,我认为这是不可能的。你认为呢?谢谢帮助我

public class OuterDto
    {
        public int Value { get; set; }
        public InnerDto Inner { get; set; }

    }

    public class InnerDto
    {
        public int OtherValue { get; set; }
    }

    public class OuterModel
    {
        public int Value { get; set; }
        public InnerModel Inner { get; set; }

    }

    public class InnerModel
    {
        public int OtherValue { get; set; }
    }

    public class test
    {
        public test()
        {
            var config = new MapperConfiguration(cfg => {
                cfg.CreateMap<InnerDto, InnerModel>().ReverseMap();
                cfg.CreateMap<OuterDto, OuterModel>().ReverseMap();
            });
            config.AssertConfigurationIsValid();

            InnerDto innerSource = new InnerDto { OtherValue = 15 };
            var source1 = new OuterDto
            {
                Value = 1,
                Inner = innerSource
            };
            var source2 = new OuterDto
            {
                Value = 2,
                Inner = innerSource
            };
            var mapper = config.CreateMapper();
            source1.Inner.OtherValue = 20;
            var dest1 = mapper.Map<OuterDto, OuterModel>(source1);
            var dest2 = mapper.Map<OuterDto, OuterModel>(source2);
            dest1.Inner.OtherValue = 1000;

            //Result:
            //dest1.Inner.OtherValue = 1000
            //dest2.Inner.OtherValue = 20

            //Expected Result:
            //dest1.Inner.OtherValue = 1000
            //dest2.Inner.OtherValue = 1000

        }
    }
eiee3dmh

eiee3dmh1#

我不确定,但请尝试在调用Map方法之前示例化OuterModel

//...
            var mapper = config.CreateMapper();
            source1.Inner.OtherValue = 20;

            var dest1 = new OuterModel();
            mapper.Map(source1, dest1);
            mapper.Map(source2, dest1);
            dest1.Inner.OtherValue = 1000;

注意:我还没有测试我的代码,这只是为了给予思考的食物

相关问题