Как лучше сопоставить элементы конфигурации с объектами приложения?

У меня есть приложение.NET, которое имеет настраиваемую конфигурацию для восстановления некоторых классов при запуске. Это не простая (де) сериализация, она более сложная и смешанная.

class FooElement : ConfigurationElement
{
     static ConfigurationProperty propValue = new ConfigurationProperty("value", typeof(int));
     static ConfigurationProperty propType = new ConfigurationProperty("type", typeof(string));

     [ConfigurationProperty("value")]
     public int Value
     {
         get { return (int)this[propValue] }
         set { this[propValue] = value }
     }

     [ConfigurationProperty("type")]
     public string Type
     {
         get { return (int)this[propType] }
         set { this[propType] = value }
     }
}

class Foo : IFoo
{
    public int Value { get; set; 
    public string Type { get; set; }
}

Некоторые из элементов конфигурации повторяют объекты приложения по свойствам, но я не хочу использовать элементы в своем приложении, я создал легкие объекты для этой цели. Вероятно, я могу назвать их POCO.

На данный момент у меня есть следующее: Config:

<elements>
    <add type="MyProj.Foo, MyProj" value="10" />
</elements>

Код:

elements.Select(e => (IFoo)Activator.CreateInstance(e.Type, e));

public Foo(FooElement element)
{
    this.Value = element.Value;
}

Как лучше это сделать? Может быть, с помощью IoC или что-то подобное.

1 ответ

Решение
interface IConfigurationConverter<TElement, TObject>
{
    TObject Convert(TElement element);
}

class FooConfigurationConverter : IConfigurationConverter<FooElement, Foo>
{
    public Foo Convert(FooElement element)
    {
        return new Foo { Value = element.Value };
    }
}

FooConfigurationConverter converter = IoC.Resolve<IConfigurationConverter<FooElement, Foo>>();
Foo foo = converter.Convert(element);
Другие вопросы по тегам