2010-05-19 7 views
1

Приложение хранит данные конфигурации в пользовательском разделе файла конфигурации. Эта информация используется во всем приложении.Чтение конфигурационного файла. Передовая практика

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

[XmlRoot("webSiteSection")] 
public class WebSiteConfig : IConfigurationSectionHandler 
{ 

    public static WebSiteConfig Current 
    { 
     get 
     {   
      if (_current == null) 
       _current = (WebSiteConfig) ConfigurationManager.GetSection("webSiteSection"); 

      return _current; 
    } 
    } 

    [XmlElement("section1")] 
    public Section1 Section1 { get; set; } 

    [XmlElement("section2")] 
    public Section2 Section2 { get; set; } 

    ... 

    public object Create(object parent, object configContext, XmlNode section) 
    { 
     var serializer = new XmlSerializer(typeof(WebSiteConfig)); 
     return serializer.Deserialize(new XmlNodeReader(section)); 
    } 
} 

Тогда я использую его как этот

<%: WebSiteConfig.Current.Section1.Value1 %> 
<%: WebSiteConfig.Current.Section1.Value2 %> 

Что вы думаете об этом ? Я нахожу это пригодным для использования, потому что он делает код простым, но также запутанным, поскольку IConfigurationSectionHandler устарел, поскольку .NET Framework 2.0

ответ

1

Ну, в принципе, я не вижу ничего плохого в концепции.

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

+0

К сожалению, у меня уже есть статический экземпляр (текущий). Это то, что вы упомянули? –

+0

@ Андрю - так и сделаешь. Я ушел из своей игры сегодня, пропустив очевидное. Итак, да, я не вижу ничего плохого в том, как вы это делаете, я делаю то же самое с моими конфигурационными разделами. –

+0

Хорошо. Что вы думаете о пользовательских классах разделов конфигурации, предложенных Франциско Пеновым? –

2
+0

Хмм, интересно :) Я постараюсь реорганизовать –

+0

Ну, наконец, я решил не рефакторировать, поскольку мне придется реализовать так много свойств. Преимущества валидации не столь замечательны по сравнению с автопромышленностью в подходе, который я использую в наши дни. –

+0

Это ваш выбор. Тем не менее, IConfigurationSectionHandler устарел, поскольку вы отметили себя и могли быть удалены в будущих версиях .Net framework. Я согласен с тем, что теперь беспокоиться о чем-то, что может сломаться через год, может показаться немного чрезмерным, но если вы начнете использовать этот шаблон, как было реализовано выше, довольно много, вы окажетесь в состоянии, в котором вам придется в конечном итоге изменить его. Мог бы это сделать и сейчас. –

Смежные вопросы