Использование AutoMapper для отображения списка<object> на ConfigurationElementCollection

У меня возникла небольшая проблема с использованием AutoMapper с некоторыми элементами конфигурации. У меня есть следующие классы:

public class SocialLinkSettingConfiguration : ConfigurationSection
{
    [ConfigurationProperty("name", IsRequired = true, IsKey = true)]
    public string Name
    {
        get { return this["name"] as string; }
        set { this["name"] = value; }
    }
    [ConfigurationProperty("description", IsRequired = true)]
    public string Description
    {
        get { return this["description"] as string; }
        set { this["description"] = value; }
    }
    [ConfigurationProperty("url", IsRequired = true)]
    public string Url
    {
        get { return this["url"] as string; }
        set { this["url"] = value; }
    }
    [ConfigurationProperty("fontAwesomeClass", IsRequired = false)]
    public string FontAwesomeClass
    {
        get { return this["fontAwesomeClass"] as string; }
        set { this["fontAwesomeClass"] = value; }
    }
    [ConfigurationProperty("imageUrl", IsRequired = false)]
    public string ImageUrl
    {
        get { return this["imageUrl"] as string; }
        set { this["imageUrl"] = value; }
    }
}

public class SocialLinkSettingConfigurationCollection : ConfigurationElementCollection
{
    public SocialLinkSettingConfiguration this[int index]
    {
        get { return (SocialLinkSettingConfiguration)BaseGet(index); }
        set
        {
            if (BaseGet(index) != null)
            {
                BaseRemoveAt(index);
            }
            BaseAdd(index, value);
        }
    }
    public void Add(SocialLinkSettingConfiguration serviceConfig)
    {
        BaseAdd(serviceConfig);
    }

    public void Clear()
    {
        BaseClear();
    }

    protected override ConfigurationElement CreateNewElement()
    {
        return new SocialLinkSettingConfiguration();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((SocialLinkSettingConfiguration)element).Name;
    }

    public void Remove(SocialLinkSettingConfiguration serviceConfig)
    {
        BaseRemove(serviceConfig.Name);
    }

    public void RemoveAt(int index)
    {
        BaseRemoveAt(index);
    }

    public void Remove(string name)
    {
        BaseRemove(name);
    }
}
public class SocialLinkSetting
{
    public string Name { get; set; }
    public string Description { get; set; }
    public string Url { get; set; }
    public string FontAwesomeClass { get; set; }
    public string ImageUrl { get; set; }
}

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

То, что я пытаюсь сделать, это взять список социальных ссылок и преобразовать его в один объект SocialLinkSettingConfigurationCollection, который имеет весь SocialLinkSetting внутри и преобразован в SocialLinkSettingConfiguration.

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

Любая помощь будет принята с благодарностью.

Спасибо Бен

1 ответ

Решение

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

Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<SocialLinkSetting, SocialLinkSettingConfiguration>();
            cfg.CreateMap<List<SocialLinkSetting>, SocialLinkSettingConfigurationCollection>()
            .AfterMap((source, dest, resolutionContext) =>
                {
                    dest.Clear();
                    source.ForEach(i => dest.Add(resolutionContext.Mapper.Map<SocialLinkSettingConfiguration>(i)));
                });
        });
Другие вопросы по тегам