AutoMapper通过依赖项注入识别前缀



我安装了AutoMapper.Extensions.Microsoft.DependencyInjection nuget包,我使用的是.NET Core 3.1。根据文件(https://docs.automapper.org/en/stable/Configuration.html)我应该能够为我的属性名称添加前缀。但是当我映射我的两个类时,带有前缀的属性是空的。我有一个抽象类,它有几个属性扩展到我的UserDto模型,然后我将UserDto模式映射到没有抽象类的UserEntity模型。我的UserEntity模型为每个属性使用前缀User,例如UserId、UserName,而我的UserDto只使用Id、Name等。我注册AutoMapper并添加我的配置,如下所示:

#region Auto Mapper
services.AddAutoMapper(config =>
{
config.RecognizePrefixes(new[] { "User", "Role", "Language" });
config.AddProfile(new DtoToEntityProfile());
config.AddProfile(new ContractToDtoProfile());
}, typeof(Startup));
#endregion

我将我的配置文件添加到配置中,看看这是否可行。在此之前,Automapper还可以通过扫描程序集自动查找我的配置文件。在不手动映射每个属性的情况下,我必须做些什么才能将我的Dto映射到实体模型?

通过查看Auto Mapper的Profile类中的函数和属性,我发现有一个RecognizePrefixes和一个ReconsizeDestinationPrefixes函数,RecognizePrefixes函数只从源中删除前缀,而RecognizeDestination prefixes功能只从目标中删除前缀。

这样一来,RecognizePrefixes就有点误导人了。我通过实现如下配置来解决我的问题:

#region Auto Mapper
services.AddAutoMapper(config =>
{
config.RecognizeDestinationPrefixes(new[] { "User", "Role", "Domain", "Language" });
config.RecognizePrefixes(new[] { "User", "Role", "Domain", "Language" });
}, typeof(Startup));
#endregion

最新更新