Настройка соглашения для всех членов с типом в automapper - PullRequest
0 голосов
/ 01 июня 2018

Все модели моего домена имеют поле public CurrencyId CurrencyId {get; set;}.Все мои модели просмотра подали public CurrencyVm Currency {get; set;}.Automapper умеет Map<CurrencyVm>(CurrencyId).Как настроить автоматическое соглашение, чтобы мне не нужно было .ForMember(n => n.Currency, opt => opt.MapFrom(n => n.CurrencyId));?

1 Ответ

0 голосов
/ 04 июня 2018

ForAllMaps ответ, спасибо @LucianBargaoanu.Этот код работает, но не был протестирован во всех случаях.Также я не знаю, как проверить, существует ли сопоставление между выбранными свойствами.

        configuration.ForAllMaps((map, expression) =>
        {
            if (map.IsValid != null)
            {
                return; // type is already mapped (or not)
            }

            const string currencySuffix = "Id";
            var currencyPropertyNames = map.SourceType
                .GetProperties()
                .Where(n => n.PropertyType == typeof(CurrencyId) && n.Name.EndsWith(currencySuffix))
                .Select(n => n.Name.Substring(0, n.Name.Length - currencySuffix.Length))
                .ToArray();
            expression.ForAllOtherMembers(n =>
            {
                if (currencyPropertyNames.Contains(n.DestinationMember.Name, StringComparer.OrdinalIgnoreCase))
                {
                    n.MapFrom(n.DestinationMember.Name + currencySuffix);
                }
            });
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...