我有以下代码
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 http://docs.automapper.org/en/stable/Before-and-after-map-actions.html但我不知道如何得到FilePath
from dest
并将其映射到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)
然后您应该配置您的映射以使用自定义解析器来映射FilePath
属性于ConfigurationDto
.
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 http://docs.automapper.org/en/stable/Custom-value-resolvers.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)