我正在使用一个简单的JSON REST API并绑定到一个非常简单的类,然后使用AutoMapper映射到一个更复杂的DTO类,将字符串转换为DateTime,将字符串转换为Enums,等等。
如果我向sourceDTO类添加新属性,则AssertConfigurationIsValid()正确抛出AutoMapperConfigurationException“找到了未映射的成员。”。
我正在考虑何时可以将新属性添加到REST 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);