Как я могу передать параметр конструктора в неявное отображение словаря с помощью AutoMapper? - PullRequest
0 голосов
/ 24 января 2019

Допустим, у меня есть отображение от TestClass до * 1002. *

Без объявленных других отображений я уже могу сопоставить Dictionary<string,TestClass> с Dictionary<string,TestClassModel>.

Представьте себехотя Dictionary<string,TestClass> было инициализировано с помощью new Dictionary<string,TestClass>(StringComparer.OrdinalIgnoreCase).Это позволяет осуществлять поиск без учета регистра.

Как можно сохранить параметр конструктора StringComparer.OrdinalIgnoreCase в сопоставленном словаре?Я попробовал явное отображение словаря-> словаря с помощью .ForCtorParam, но это просто приводит к пустому целевому словарю (как тогда вам нужно было бы добавить сопоставления KeyValuePair.)

Fiddle: https://dotnetfiddle.net/KYQNWT

1 Ответ

0 голосов
/ 24 января 2019

Я все заработал, но не уверен, почему он не работает на DotNetFiddle.Если я запускаю его в своем собственном приложении, оно работает просто отлично.Я оставил в других вещах, которые я проверял.

  Mapper.Initialize(cfg =>
  {
    cfg.CreateMap<TestClass, TestClassModel>()
      .ForMember(d => d._F1, s => s.MapFrom(o => o.F1));

    cfg.CreateMap<KeyValuePair<string, TestClass>, KeyValuePair<string, TestClassModel>>()
      .ConstructUsing(x => new KeyValuePair<string, TestClassModel>(x.Key, Mapper.Map<TestClassModel>(x.Value)));

    cfg.CreateMap(typeof(Dictionary<,>), typeof(Dictionary<string, TestClassModel>))
      //.ForCtorParam("collection", opt => opt.MapFrom(src => Mapper.Map<IEnumerable<KeyValuePair<string, TestClassModel>>>(src)))
      //.ForCtorParam("comparer", opt => opt.MapFrom(src => StringComparer.OrdinalIgnoreCase));
      .ConstructUsing(src => new Dictionary<string, TestClassModel>(Mapper.Map<IEnumerable<KeyValuePair<string, TestClassModel>>>(src), StringComparer.OrdinalIgnoreCase));
  });

Если вы собираетесь запускать это в любом типе реальной среды, я настоятельно рекомендую использовать экземплярный тип automapper .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...