Как использовать IConfigurationSectionHandler для глобальной конфигурации? - PullRequest
2 голосов
/ 12 сентября 2010

Я недавно начал использовать IConfigurationSectionHandler в качестве пользовательского раздела конфигурации для моей библиотеки DLL DLL. Я использую его в файлах web.config для передачи значений настроек в DLL BL.

Хотя он прекрасно читает локальный файл web.config, проблема заключается в чтении файла глобальной конфигурации (root web.config), который состоит из общих настроек.

Как мне это сделать, используя IConfigurationSectionHandler?

Ответы [ 3 ]

4 голосов
/ 12 сентября 2010

Я бы предпочел наследовать ConfigurationSection, а не реализовывать IConfigurationSectionHandler, поскольку вам не нужно вручную иметь дело с XML.Каждый объясняет одно из вышеперечисленных:

http://support.microsoft.com/kb/309045

http://msdn.microsoft.com/en-us/library/2tw134k3.aspx

4 голосов
/ 12 сентября 2010

Чтобы правильно ответить на ваш вопрос, нам, вероятно, понадобится код из обработчика пользовательского раздела.

Однако, один момент, который сразу же приходит на ум, это то, что вы, возможно, неправильно используете аргумент parent, который передается вашему обработчику.

Чтобы получить нашу терминологию на той же странице, я буду ссылаться на метод 'Create', который является вашей реализацией IConfigurationSectionHandler.Create, и на configuration object, который является объектом, который вы возвращаете из 'Create 'method.

Очень просто, метод обработчиков вашего раздела Create должен вызываться для каждого вхождения вашего пользовательского раздела в иерархии файлов web.config.При каждом вызове предыдущий объект конфигурации, который вы возвращали из Create, передается в следующий вызов в качестве аргумента parent, конечно, первый вызов будет иметь родительский элемент null, который указывает, что вам нужно создать эту начальную 'конфигурациюobject ', последующие вызовы не должны создавать новый configuration objec t, но должны добавлять или изменять тот, который передается как родительский.

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

NB: Вы действительно должны использовать ConfigurationSection , так как IConfigurationSectionHandler не рекомендуется с Framework 2.0.Вот ссылка на использование этого класса.

http://msdn.microsoft.com/en-us/library/2tw134k3.aspx

3 голосов
/ 21 января 2015

Это пример использования нашего собственного класса конфигурации в web.config. Допустим, у нас есть класс, который нужно инициализировать в web.config и использовать в нашем коде.

Вот наш класс:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml;

namespace MyProject.MyConfigSection
{
    public class MyConfig:System.Configuration.IConfigurationSectionHandler
    {
        public int MyNum1 { get; set; }
        public int MyNum2 { get; set; }
        public int MyNum3 { get; set; }

    public MyConfig()
    {
        MyNum1 = 0;
        MyNum2 = 0;
        MyNum3 = 0;
    }

//implement interface member
    public object Create(object parent, object configContext, System.Xml.XmlNode section)
    {
        try
        {
            MyConfig options = new MyConfig();
            if (section == null) return options;

            foreach (XmlNode node in section.ChildNodes)
            {
                if (node.Name == "MyNum1")
                    options.MyNum1 = int.Parse(node.InnerText);
                else if (node.Name == "MyNum2")
                    options.MyNum2 = int.Parse(node.InnerText);
                else if (node.Name == "MyNum3")
                    options.MyNum3 = int.Parse(node.InnerText);
            }
            return options;
        }
        catch (Exception ex)
        {
            throw new System.Configuration.ConfigurationException(
             "Error loading startup default options", ex, section);
        }

    }
}

}

Теперь мы объявляем это с именем в web.config.

<configuration>
    <configSections>
        <section name="MYTESTCONFIGSECTION" type="MyProject.MyConfigSection.MyConfig" />
.... //other sections
.... //other sections
    </configSections>

Теперь в самом файле web.config мы добавляем это между тегами конфигурации:

<MYTESTCONFIGSECTION>
    <MyNum1>111</MyNum1>
    <MyNum2>222</MyNum2>
    <MyNum3>333</MyNum3>
</MYTESTCONFIGSECTION>
</configuration>

Теперь мы можем получить доступ к этому разделу из кода, подобного следующему:

var myconfig = System.Web.Configuration.WebConfigurationManager.GetSection("MYTESTCONFIGSECTION") as MyConfigSection.MyConfig;
    myconfig.MyNum1;
    myconfig.MyNum2;
    myconfig.MyNum3;

Надеюсь, это кому-нибудь поможет.

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