Automapper: использование структуры, возвращаемой пользовательским распознавателем - PullRequest
4 голосов
/ 20 марта 2011

В AutoMapper я использую ValueResolver, который возвращает структуру, подобную этой

struct MyStruct
{
        public int propA;
        public int propB;
        public int propC;
}

class MyResolver : ValueResolver<MyViewModel, MyStruct>
{ 
     protected override MyStruct ResolveCore(MyViewModel source)
     {
      ....return MyStruct data
     }
}

Я вернул структуру, потому что правила отображения довольно сложны, и я не мог написать собственный преобразователь для каждого свойства, поскольку они связаны друг с другом.

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

AutoMapper.Mapper.CreateMap<MyViewModel, myData>()
    .ForMember(dest => dest.SomePropA, src => src.ResolveUsing<MyResolver>().propA))
    .ForMember(dest => dest.SomePropB, src => src.ResolveUsing<MyResolver>().propB))

К сожалению, это не работает.

Похоже, src.ResolveUsing<MyResolver>() не возвращает структуру

Любая помощь более чем ценится.

Спасибо.

1 Ответ

8 голосов
/ 24 марта 2011

Используя FromMember, вы можете передать свойство из источника вашему ValueResolver.

Вы можете использовать что-то вроде этого:

.ForMember(dest => dest.SomePropA, opt=> opt.ResolveUsing<MyResolver>().FromMember(src => src.propA))

Если вы не укажете FromMember, AutoMapper передаст источник вашему ValueResolver.

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