如何获取AutoMapper AssertConfigurationIsValid()来检测新的未映射的源属性

时间:2019-08-08 01:20:34

标签: c# automapper dto

我正在使用一个简单的JSON REST API并绑定到一个非常简单的类,然后使用AutoMapper映射到一个更复杂的DTO类,将字符串转换为DateTime,将字符串转换为Enums,等等。

如果我向sourceDTO类添加新属性,则AssertConfigurationIsValid()正确抛出AutoMapperConfigurationException“找到了未映射的成员。”。

我正在考虑何时可以将新属性添加到R​​EST API端点,另一个开发人员(或我本人)可以将新属性添加到源类中,但是可能忘记将相应的属性添加到DTO类中。

如果我创建一个反向映射(由于我正在做的操作可能会很复杂,再加上我将永远不会使用它,因为API仅是单向的),那么验证显然可以正常工作,并且任何新属性都将添加到源类将导致验证错误。

我的问题,我是否必须创建一个ReverseMap,以便能够检测何时源属性未正确映射到相应的DTO属性?还是我错过了一些魔术方法/过载/设置?

注意:我正在通过.NET Core中的依赖项注入使用最新的AutoMapper(v8)。

using AutoMapper;
namespace MyNamespace
{
    public class MyService
    {
        readonly IMapper _mapper;

        public MyService(IMapper mapper)
        {
            _mapper = mapper;
            _mapper.ConfigurationProvider.AssertConfigurationIsValid();
        }

        public sourceDTO TestMap()
        {
            var src = new source { name = "bob" };
            return _mapper.Map<sourceDTO>(src);
        }
    }

    public class source
    {
        public string name { get; set; }
        //more complex properties stripped for brevity...

        //problem: how to get AssertConfigurationIsValid to throw a validation error without having to create a reverse map
        //public int someId { get; set; }
    }

    public class sourceDTO
    {
        public string name { get; set; }
        //more complex properties stripped for brevity...

        //note: if I uncomment this property then AssertConfigurationIsValid correctly points out the mapping isn't 1-to-1
        //public int id { get; set; }
    }

    public class TestProfile : Profile
    {
        public TestProfile()
        {
            CreateMap<source, sourceDTO>();
            //note: if I create a reverse map then AssertConfigurationIsValid picks up unmapped properties - but do I have to do this?
            //CreateMap<sourceDTO, source>();
        }
    }
}

更新:解决我的问题的方法是更改​​;

CreateMap<source, sourceDTO>();

至;

CreateMap<source, sourceDTO>(MemberList.Source);

0 个答案:

没有答案