Преобразуйте динамические данные в статические типы, если они существуют, используя AutoMapper - PullRequest
0 голосов
/ 08 октября 2019

У меня есть объект с переводимым свойством Name и словарь для хранения, который переводится как JSON.

    public class Entity 
    {
        public string Id { get; set; }
        public string Name { get; set; }
        //key is culture's name
        public IDictionary<string, Translation> Translations { get; set; }
    }

    public class Translation
    {
        public string Name { get; set; }
        public string Culture { get; set; }
    }

    public class EntityDTO 
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }

Как настроить AutoMapper для сопоставления свойства Name из словаря переводов, если таковой существует?

    public static class AutoMapExtensions
    {
        public static IMappingExpression<TTranslatableEntity, TDestination>
            CreateTranslatableMap<TTranslatableEntity, TTranslation, TDestination>(
                this IMapperConfigurationExpression configuration, MultiLingualMapContext multiLingualMapContext)
            where TTranslation : class, ITranslation
            where TTranslatableEntity : ITranslatable<TTranslation>
        {
           return configuration.CreateMap<TTranslatableEntity, TDestination>().AfterMap(
                (source, destination, context) =>
                {
                    if (source.Translations == null)
                    {
                        return;
                    }

                    if (source.Translations.TryGetValue(CultureInfo.CurrentUICulture.Name,
                        out TTranslation translation))
                    {
                        if (translation != null)
                        {
                            context.Mapper.Map(translation, destination);
                            return;
                        }
                    }

                    var defaultLanguage = multiLingualMapContext.SettingManager
                        .GetSettingValue(LocalizationSettingNames.DefaultLanguage);

                    if (source.Translations.TryGetValue(defaultLanguage, out translation))
                    {
                        if (translation != null)
                        {
                            context.Mapper.Map(translation, destination);
                            return;
                        }
                    }

                    translation = source.Translations.FirstOrDefault().Value;
                    if (translation != null)
                    {
                        context.Mapper.Map(translation, destination);
                    }
                }
            );
        }
    }

При попытке запустить тест моя VS была повреждена и исправлена ​​только при перезагрузке компьютера,С комментированием этот раздел кода тест тоже проходил.

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