Мне нужно что-то вроде этого:
public myMappingProfile(IInjectableService myInjectableService)
{
CreateMap<Source, Destination>()
.ForMember(dest => dest.DestinationDictionary, opt => opt.MapFrom(src =>
{
var dict = new Dictionary<myEnum, string>();
foreach (var item in src.SourceDictionary)
{
dict.Add(item.Key, myInjectableService.BuildUrl(item.Value));
}
return dict;
}));
Зависимость Внедрение службы работает нормально.Но Visual Studio показывает следующее сообщение об ошибке:
Лямбда-выражение с телом оператора не может быть преобразовано в дерево выражений
Затем я изменил тип назначения со словаря наList> и пытался использовать метод AfterMap:
.ForMember(dest => dest.DestinationListOfKeyValuePair, opt => opt
.MapFrom(src => src.SourceDictionary))
.AfterMap((src, dest) => dest.DestinationListOfKeyValuePair
.ForEach(ti => ti.Value = myInjectableService.BuildUrl(ti.Value)));
Но Visual Studio жалуется:
Свойство или индексатор не могут быть назначены - оно доступно только для чтения
Следующей попыткой был CustomResolver:
.ForMember(dest => dest.TenantImages, opt => opt.MapFrom<CustomResolver>())
открытый класс CustomResolver: IValueResolver >> {private readonly IInjectableService _myInjectableService;
public CustomResolver(IInjectableService myInjectableService)
{
_myInjectableService = myInjectableService;
}
public List<KeyValuePair<MyEnum, string>> Resolve(
Source source,
Destination destination,
List<KeyValuePair<MyEnum, string>> destMember,
ResolutionContext context)
{
destMember = new List<KeyValuePair<MyEnum, string>>();
foreach (var entry in source.SourceDictionary)
{
destMember.Add(new KeyValuePair<myEnum, string>(entry.Key, _myInjectableService.BuildUrl(entry.Value)));
}
return destMember;
}
}
Но выдается следующее исключение:
System.MissingMethodException: для этого объекта не определен конструктор без параметров.
Я не знаю, как поместить IInjectableService в CustomResolver.
Anyидеи как решить эту проблему?Спасибо.