繁体   English   中英

带有动作的自动映射器地图集合

[英]automapper map collections with action

我有以下代码

IList<ConfigurationDto> result = new List<ConfigurationDto>();
foreach (var configuration in await configurations.ToListAsync())
{
    var configurationDto = _mapper.Map<ConfigurationDto>(configuration);
    configurationDto.FilePath = _fileStorage.GetShortTemporaryLink(configuration.FilePath);
    result.Add(configurationDto);
}
return result;

如果foreach,我该如何使用automapper? 我可以映射集合,但是如何为每个项目调用_fileStorage.GetShortTemporaryLink

我看过AfterMap但我不知道如何从dest获取FilePath并将其一一映射到src 我可以为此使用自动映射器吗?

public class ConfigurationDto
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Version { get; set; }
    public DateTime CreateDateTime { get; set; }
    public long Size { get; set; }
    public string FilePath { get; set; }
}

您可以使用IValueResolver接口将地图配置为从函数映射属性。 类似于下面的示例。

public class CustomResolver : IValueResolver<Configuration, ConfigurationDto, string>
{
    private readonly IFileStorage fileStorage;

    public CustomResolver(IFileStorage fileStorage)
    {
        _fileStorage= fileStorage;
    }

    public int Resolve(Configuration source, ConfigurationDto destination, string member, ResolutionContext context)
    {
        return _fileStorage.GetShortTemporaryLink(source.FilePath);
    }
}

一旦我们有了IValueResolver实现,我们就需要告诉 AutoMapper 在解析特定目标成员时使用这个自定义值解析器。 我们有几个选项可以告诉 AutoMapper 要使用的自定义值解析器,包括:

  • MapFrom<TValueResolver>
  • MapFrom(typeof(CustomValueResolver))
  • MapFrom(aValueResolverInstance)

然后您应该配置您的映射以使用自定义解析器来映射ConfigurationDto上的FilePath属性。

var configuration = new MapperConfiguration(cfg => cfg.CreateMap<Configuration, ConfigurationDto>()
                   .ForMember(dest => dest.FilePath, opt => opt.MapFrom<CustomResolver>()));

您可以在此链接中查看有关自定义值解析器的更多信息: http : //docs.automapper.org/en/stable/Custom-value-resolvers.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM