Невозможно получить доступ к элементам контекста автомата после обновления до 9 - PullRequest
0 голосов
/ 15 октября 2019

У меня есть такой маппер:

CreateMap<Source, ICollection<Dest>>()
    .ConvertUsing((src, dst, context) => 
    {
        return context.Mapper.Map<ICollection<Dest>>
            (new SourceItem[] { src.Item1, src.Item2 ... }.Where(item => SomeFilter(item)),
            opts => opts.Items["SomethingFromSource"] = src.Something);
    });

CreateMap<SourceItem, Dest>()
    .ForMember(d => d.Something, opts => opts.MapFrom((src, dst, dstItem, context)
        => (string)context.Items["SomethingFromSource"]));

Это дает мне исключение, говорящее You must use a Map overload that takes Action<IMappingOperationOptions>. Ну, я использую перегрузку Map, которая выполняет это действие. Как еще я могу это сделать?

1 Ответ

0 голосов
/ 16 октября 2019

Несколько соображений, когда вы используете внутренний картограф (например, context.Mapper)

Во-первых, старайтесь не использовать context.Mapper.Map<TDestination>(...), используйте context.Mapper.Map<TSource, TDestination>(...) вместо этого, он ведет себя намного лучше.

* 1007Во-вторых, использование контекста во внутренних преобразователях нарушит инкапсуляцию. Если вам нужно установить значения во внутренних объектах, рассмотрите эти два решения:

Если вы хотите установить значения после внутренней карты

context.Mapper.Map<Source, Dest> (source, opts => opts.AfterMap((s, d) => 
    d.Something = source.Something))

В случае, если вы хотите установитьзначения перед внутренней картой

context.Mapper.Map<Source, Dest> (source, new Dest()
    {
        Something = source.Something
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...