Прошу прощения за непонятность в названии вопроса.Я попытаюсь объяснить простыми словами:
Я создаю экземпляр Mapper внутри моей функции с указанным отображением:
//omitted rest of the mapping to make the code simpler
private TRADELINE MapTradeLine(Tradeline tradeLine, TradelineMeta tradelineMeta)
{
MapperConfiguration configMapTradeline = new MapperConfiguration(
cfg =>
{
cfg.CreateMap<Tradeline, TRADELINE>()
.ForPath(dest => dest.TLSOURCE, opt => opt.MapFrom(src => src.Source))
.ForPath(dest => dest.REQID, opt => opt.MapFrom(src => tradelineMeta.RequestId))
});
IMapper mapperTradeline = configMapTradeline.CreateMapper();
return mapperTradeline.Map<Tradeline, TRADELINE>(tradeLine);
}
Это работает нормально.Хотя хотелось бы переместить этот код в Profile
Примерно так:
public class MappingProfile : Profile
{
public MappingProfile()
{
.CreateMap<Tradeline, TRADELINE>()
.ForPath(dest => dest.TLSOURCE, opt => opt.MapFrom(src => src.Source))
.ForPath(dest => dest.REQID, opt => opt.MapFrom(src => tradelineMeta.RequestId));
}
}
public static class MappingHelper
{
private static readonly Lazy<IMapper> Lazy = new Lazy<IMapper>(() =>
{
var config = new MapperConfiguration(cfg =>
{
cfg.ShouldMapProperty = p => p.GetMethod.IsPublic || p.GetMethod.IsAssembly;
cfg.AddProfile<MappingProfile>();
});
var mapper = config.CreateMapper();
return mapper;
});
public static IMapper Mapper => Lazy.Value;
}
После этого я могу использовать экземпляр IMapper
для выполнения сопоставления.Моя цель - избежать инициализации AutoMapper для каждого вызова метода.
Я застрял на том, как указать tradelineMeta.RequestId
, если я использую подход Profile
.
Возможно ли это?