Пользовательская конфигурация в .NET - PullRequest
3 голосов
/ 08 апреля 2009

Я вижу простые примеры, касающиеся пользовательской конфигурации в .NET. Мой случай немного сложнее, с вложенными узлами.

Я бы хотел прочитать это из файла конфигурации:

 <environments>

<environment name="live" url="http://www.live.com">
  <server name="a" IP="192.168.1.10"></server>
  <server name="b" IP="192.168.1.20"></server>
  <server name="c" IP="192.168.1.30"></server>      
</environment>

<environment name="dev" url="http://www.dev.com">
  <server name="a" IP="192.168.1.10"></server>
  <server name="c" IP="192.168.1.30"></server>
</environment>

<environment name="test" url="http://www.test.com">
  <server name="b" IP="192.168.1.20"></server>
  <server name="d" IP="192.168.1.40"></server>
</environment></environments> 

Если бы кто-нибудь мог предоставить код для этого, я был бы признателен

Спасибо!

Ответы [ 7 ]

9 голосов
/ 08 апреля 2009

Это можно прочитать, реализовав пользовательские классы конфигурации, наследуемые от класса ConfigurationElement.

Вот пример элемента "сервер":

public class ServerElement: ConfigurationElement
{
    [ConfigurationProperty("name", IsRequired = true, IsKey = true)]
    public string Name
    {
        get { return ((string)base["name"]); }
        set { base["name"] = value; }
    }

    ...
}

Элемент среды на самом деле является коллекцией и может быть реализован так:

public class EnvironmentElement: ConfigurationElementCollection
{
    protected override ConfigurationElement CreateNewElement(string elementName)
    {
        return new ServerElement(...);
    }
}
7 голосов
/ 08 апреля 2009

Изысканный инструмент, с которым я недавно столкнулся, - это Дизайнер разделов конфигурации на CodePlex; хорошо интегрируется в VS.

Создает классы, XML-схему и т. Д. Рекомендуется.

6 голосов
/ 08 апреля 2009

Вам необходимо создать несколько классов для обработки пользовательских разделов конфигурации файла конфигурации.

Фил Хаак написал очень хорошую запись в блоге: Пользовательские разделы конфигурации за 3 простых шага.

Edit:

Я пытался найти статью Code Project, которую использовал в прошлом, чтобы узнать, как этого добиться, и нашел ее в записи Фила в блоге:

вот оно Раскрытие тайн конфигурации .NET 2.0

содержит информацию, необходимую для обработки вложенных элементов и коллекций.

1 голос
/ 08 апреля 2009
0 голосов
/ 08 апреля 2009

Вот что я реализовал недавно после прочтения этой статьи:

Использование Reflection для привязки классов к файлам .ini

http://dvuyka.spaces.live.com/blog/cns!305B02907E9BE19A!174.entry

0 голосов
/ 08 апреля 2009

Я бы использовал файл App.Config

System.Configuration.ConfigurationSettings.AppSettings [ "DataBasePath"];

http://www.eggheadcafe.com/community/aspnet/2/10004734/appconfig-file-c.aspx

0 голосов
/ 08 апреля 2009

Глядя на содержимое вашего примера (нацеливание на различные промежуточные среды), а не на динамическое чтение файлов конфигурации, вы можете посмотреть проекты веб-развертывания , как указано в ответе предыдущий вопрос .

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

...