voliuf.narod.ru

главная

друзья

помощь сайту

Конфигурирование и настройка Microsoft ASP.NET

Бесплатные учебники по темам

Партнерская программа

1.Обзор настройки Microsoft ASP.NET

2.Изучение архитектуры настроек ASP.NET

3.Настроечные параметры ASP.NET

4.Настроечные параметры System.Web

5.Настроечные параметры мобильных элементов управления

6.Настроечные параметры Microsoft .NET

7.Настроечные параметры CLR

8.Параметры IIS

9.Создание собственных параметров


Конфигурирование и настройка Microsoft ASP.NET
9.Создание собственных параметров
  
В части III рассматривается, как создавать и использовать собственные разделы настроек и собственные обработчики разделов настроек. Собственные разделы настроек применяются для различных целей и очень полезны при развертывании приложений или элементов управления.

Создание и использование собственных разделов

До сих пор мы рассматривали, как использовать разделы настроек, которые устанавливаются вместе с Microsoft .NET Framework. В этой лекции будет рассказано, как создавать и использовать в приложениях собственные разделы настроек. Собственные разделы настроек позволяют решить большое количество различных проблем. Главным преимуществом собственных разделов настроек является то, что они позволяют изменять настроечные параметры, не требуя при этом перекомпиляции приложения.

Изучение обработчиков .NET

Обработчики разделов настроек интерпретируют и используют разделы настроек. (Обработчики в достаточной степени рассмотрены в лекции 2.) Имеется несколько обработчиков разделов настроек, включенных в пространство имен System.Configuration, которые используются для разделов настроек по умолчанию. Ниже приведены обработчики разделов настроек, включенные в пространство имен System.Configuration.

  • System.Configuration.IgnoreSectionHandler. Данный обработчик не выполняет никаких действий с параметрами. Он используется для разделов <startup>, <mscorlib> и <runtime>. Используйте его только в том случае, если вы планируете вручную читать параметры, не используя обработчиков раздела настроек.
  • System.Configuration.NameValueFileSectionHandler. Данный обработчик раздела интерпретирует раздел <appSettings> (подробно обсуждается в лекции 2).
  • System.Configuration.DictionarySectionHandler. Данный обработчик раздела читает параметры и собирает объект Hashtable, который хранит различные ключи и значения.
  • System.Configuration.SingleTagSectionHandler. Данный обработчик раздела читает параметры из собственного раздела, содержащего несколько значений.

Эти обработчики разделов настроек включены по умолчанию в пространство имен System.Configuration. В других пространствах имен имеется множество других обработчиков, но они созданы специально для определенных разделов и не могут помочь в создании вашего собственного раздела. Разделы, включенные в пространство имен System.Configuration, полезны при создании собственных разделов настроек, так как вместо создания своего собственного обработчика раздела можно воспользоваться готовыми обработчиками.

Создание собственного раздела с помощью готовых обработчиков

Первым типом собственных разделов настроек является раздел, который работает с одним из обработчиков разделов, включенных в состав пространства имен System.Configuration. Четыре включенных в него обработчика позволяют быстро создавать собственные разделы настроек без необходимости в написании какого-либо кода для их обработки – нужно только написать код для чтения значений.

Создание раздела с помощью NameValueFileSectionHandler

Обработчик раздела NameValueFileSectionHandler облегчает создание собственного раздела, аналогичного разделу <appSettings>. Этот раздел хранит несколько пар ключ/значение, которые затем могут быть прочитаны через объект NameValueCollection. Первым шагом является объявление раздела, включая имя раздела и обработчика раздела, используемого для интерпретации раздела, в разделе <configSections> файла machine.config сервера или файла web.config приложения.

<configSections>
  <section name="myAppSettings"
    type="System.Configuration.NameValueFileSectionHandler,
    System, Version=1.0.5000.0, Culture=neutral,
    PublicKeyToken=b77a5c561934e089" />
</configSections>

Это объявление позволяет создать в своем настроечном файле раздел с именем <myAppSettings>, обрабатываемый обработчиком раздела NameValueFileSectionHandler. Следующий шаг состоит в добавлении этого раздела в настроечный файл.

<myAppSettings>
  <add key="Key1" value="Our first value" />
  <add key="Key2" value="Our Second value" />
</myAppSettings>

Данный раздел интерпретируется NameValueFileSectionHandler и будет доступен вашим приложениям через объект ConfigurationSettings. Ниже приведен код для доступа к ключам, добавленным в раздел.

C#

NameValueCollection nvcMyAppSettings =
  ConfigurationSettings.GetConfig("myAppSettings");
Response.Write(nvcMyAppSettings["Key1"].ToString());
Response.Write(nvcMyAppSettings["Key2"].ToString());

VB.NET

Dim nvcMyAppSettings As NameValueCollection = _
  ConfigurationSettings.GetConfig("myAppSettings")
Response.Write(nvcMyAppSettings("Key1").ToString())
Response.Write(nvcMyAppSettings("Key2").ToString())

Метод GetConfig объекта ConfigurationSettings создает коллекцию NameValueCollection, содержащую все пары ключ/значение, добавленные в раздел. Вы должны передать в метод GetConfig имя своего раздела. Если он является подразделом или частью группы разделов, перед именем раздела нужно указать группу разделов или родительский раздел. Например, если раздел находится в группе разделов Microsoft, при вызове метода GetConfig следует указать "Microsoft/MyAppSettings".

Создание раздела с помощью DictionarySectionHandler

Еще одним обработчиком разделов по умолчанию, который можно использовать для создания разделов, содержащих пары ключ/значение, является DictionarySectionHandler. Этот обработчик работает аналогично NameValueFileSectionHandler, за исключением того, что вместо коллекции ключ/значение он возвращает объект Hashtable. Процедура аналогична созданию собственного раздела с помощью NameValueFileSectionHandler. Первым шагом является объявление раздела в разделе <configSections>.

<configSections>
  <section name="myAppSettingsHash"
    type="System.Configuration.DictionarySectionHandler, System,
    Version=1.0.5000.0, Culture=neutral,
    PublicKeyToken=b77a5c561934e089" />
</configSections>

После того как в раздел <configSections> добавлен этот элемент, создайте в настроечном файле раздел <myAppSettingsHash>, который будет обрабатываться DictionarySectionHandler. Ниже приведен раздел, добавленный в настроечный файл.

<myAppSettingsHash>
  <add key="Key1" value="Our first value" />
  <add key="Key2" value="Our Second value" />
</myAppSettingsHash>

Этот раздел будет интерпретироваться DictionarySectionHandler. Значения могут быть прочитаны с помощью того же метода GetConfig, использующего DictionarySectionHandler. Ниже приведен код для доступа к значениям из настроечного файла.

C#

HashTable htMyAppSettings = (HashTable)
  ConfigurationSettings.GetConfig("myAppSettingsHash");
Response.Write(htMyAppSettings["Key1"].ToString());
Response.Write(htMyAppSettings["Key2"].ToString());

VB.NET

Dim htMyAppSettings As HashTable = _
  CType(ConfigurationSettings.GetConfig("myAppSettingsHash"), _
  HashTable)
Response.Write(htMyAppSettings("Key1").ToString())
Response.Write(htMyAppSettings("Key2").ToString())

Как и при работе с NameFileValueSectionHandler, для создания Hashtable, заполненного парами ключ/значение, указанными в этом разделе, используется метод GetConfig и имя раздела.

Создание раздела с помощью SingleTagSectionHandler

Обработчик раздела SingleTagSectionHandler используется аналогично двум предыдущим обработчикам разделов, за исключением того, что все пары ключ/значение сохраняются не в отдельных элементах <add>, а в одном элементе раздела. Первым шагом является объявление раздела в разделе <configSections>.

<configSections>
  <section name="myAppSettingsSingle"
    type="System.Configuration.SingleTagSectionHandler, System,
    Version=1.0.5000.0, Culture=neutral,
    PublicKeyToken=b77a5c561934e089" />
</configSections>

Раздел <myAppSettingsSingle> будет обрабатываться SingleTagSectionHandler. Затем можно добавить в свой настроечный файл раздел, который содержит несколько пар ключ/значение.

<myAppSettingsSingle Key1="Our first value"
  Key2="Our Second value" />

Вы можете получить доступ к этим парам ключ/значение из своего приложения с помощью метода, который используется для доступа к разделу, обрабатываемому DictionarySectionHandler. Ниже приведен код для доступа к этим значениям из приложения.

C#

HashTable htMyAppSettings = (HashTable)
  ConfigurationSettings.GetConfig("myAppSettingsSingle");
Response.Write(htMyAppSettings["Key1"].ToString());
Response.Write(htMyAppSettings["Key2"].ToString());

VB.NET

Dim htMyAppSettings As HashTable = _
  CType(ConfigurationSettings.GetConfig("myAppSettingsSingle"), _
  HashTable)
Response.Write(htMyAppSettings("Key1").ToString())
Response.Write(htMyAppSettings("Key2").ToString())

Данный обработчик похож на остальные обработчики, но для добавления значений не используется элемент <add>. Это уменьшает размер разделов настроек и упрощает чтение.

Вложенные разделы настроек

Собственные разделы настроек бывают вложены в группы разделов. Это полезно при организации нескольких групп коллекций. Первым шагом является объявление раздела в требуемой группе разделов раздела <configSections>.

<configSections>
  <sectionGroup name="Microsoft" >
    <sectionGroup name="Settings" >
      <section name="myAppSettingsSingle"
        type="System.Configuration.SingleTagSectionHandler,
        System, Version=1.0.5000.0, Culture=neutral,
        PublicKeyToken=b77a5c561934e089" />
    </sectionGroup>
  </sectionGroup>
</configSections>

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

<Microsoft>
  <Settings>
    <myAppSettingsSingle Key1="Our first value"
      Key2="Our Second value" />
  </Settings>
</Microsoft>

В примере раздел настроек обрабатывается SingleTagSectionHandler. Ниже приведен код для получения этих значений в приложении.

C#

HashTable htMyAppSettings = (HashTable) ConfigurationSettings.
  GetConfig("Microsoft/Settings/myAppSettingsSingle");
Response.Write(htMyAppSettings["Key1"].ToString());
Response.Write(htMyAppSettings["Key2"].ToString());

VB.NET

Dim htMyAppSettings As HashTable = _
  CType(ConfigurationSettings.GetConfig("Microsoft/Settings/" _
  & "myAppSettingsSingle"), HashTable)
Response.Write(htMyAppSettings("Key1").ToString())
Response.Write(htMyAppSettings("Key2").ToString())

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

Создание собственного раздела с собственным обработчиком раздела

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

Изучение интерфейса IConfigurationSectionHandler

Об этом интерфейсе уже упоминалось выше, но теперь мы рассмотрим его более подробно. Интерфейс IConfigurationSectionHandler применяется для создания обработчика раздела настроек, который используется архитектурой конфигурирования .NET. Интерфейс IConfigurationSectionHandler требует, чтобы класс включал метод Create, который возвращает объект. Ниже приведен пример класса для реализации интерфейса IConfigurationSectionHandler.

C#

using System;
using System.Data;
using System.Data.SqlClient;
using System.XML;
using System.Configuration;

namespace MicrosoftConfig
{
  public class CustomHandlerExample : IConfigurationSectionHandler
  {
    public object Create(object parent, object configContext,
      XmlNode section)
    {
      //Handler Code Here
    }
  }
}

VB.NET

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.XML
Imports System.Configuration

Namespace MicrosoftConfig
  Public Class CustomHandlerExample
    Implements IConfigurationSectionHandler
    Public Function Create(parent As Object, configContext As _
      Object, section As XmlNode) As Object Implements _
      IConfigurationSectionHandler.Create
      'Handler Code Here
    End Function
  End Class
End Namespace

Этот класс реализует IConfigurationSectionHandler и включает единственный метод – Create. В данном методе реализован код, который интерпретирует раздел настроек. Метод Create принимает три различных параметра (см. табл. 9.1).

Таблица 9.1. Параметры метода Create
Параметр Описание
parent – object Первый объект, передаваемый в метод, содержит настроечные параметры из всех родительских разделов настроек.
configContext – object Второй передаваемый параметр – это объект HttpConfigurationContext. Он позволяет определять виртуальный путь, используемый для доступа к ресурсу.
section – XmlNode XmlNode содержит код XML раздела настроек, интерпретируемый обработчиком.

Метод Create возвращает простой объект, который преобразовывается при чтении его в приложении. Метод Create – это единственный обязательный метод для данного интерфейса.

Создание простого собственного обработчика раздела

Давайте создадим простой собственный обработчик раздела, который читает из раздела настроек единственное значение и возвращает его в приложение. Перед созданием кода обработчика раздела введите в файл machine.config или web.config приложения свой раздел настроек и объявление обработчика раздела. Ниже приведен простой раздел, используемый для примера.

<MicrosoftConfig MyHomePage="http://www.microsoft.com" />

Данный раздел включает единственный параметр, который будет считываться обработчиком. Нужно добавить раздел в <configSections>, где происходит объявление обработчика раздела настроек для этого раздела настроек. Ниже приведена запись в разделе <configSections>.

<configSections>
  <section name="MicrosoftConfig"
    type="MicrosoftConfig.CustomHandlerExample, MicrosoftConfig,
    Version=1.0.0.0, Culture=neutral,
    PublicKeyToken= a1690a5ea44bab32" />
</configSections>

Теперь раздел <MicrosoftConfig> будет обрабатываться обработчиком раздела MicrosoftConfig.CustomHandlerExample. Однако обработчик раздела все еще ничего не делает; нужно написать код, который проверяет XML раздела настроек и возвращает значения в приложение. Используя объект XmlNode, передаваемый в метод Create, вы можете прочитать значение единственного свойства раздела настроек.

C#

using System;
using System.Data;
using System.Data.SqlClient;
using System.XML;
using System.Configuration;

namespace MicrosoftConfig
{
  public class CustomHandlerExample : IConfigurationSectionHandler
  {
    public object Create(object parent, object configContext,
      XmlNode section)
    {
      string sHomePage;
      sHomePage = section.Attributes.Item[0].Value;
      return sHomePage;
    }
  }
}

VB.NET

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.XML
Imports System.Configuration

Namespace MicrosoftConfig
  Public Class CustomHandlerExample
    Implements IConfigurationSectionHandler
    Public Function Create(parent As Object, configContext As _
      Object, section As XmlNode) As Object Implements _
      IConfigurationSectionHandler.Create
      Dim sHomePage As String
      sHomePage = section.Attributes.Item(0).Value
      Return sHomePage
    End Function
  End Class
End Namespace

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

C#

string sHomePage;
sHomePage = (string)
  ConfigurationSettings.GetConfig("MicrosoftConfig");
Response.Write("MyHomePageIs:" + sHomePage;

VB.NET

Dim sHomePage As String
sHomePage = CStr(ConfigurationSettings.GetConfig("MicrosoftConfig"))
Response.Write(("MyHomePageIs:" + sHomePage))

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

Создание собственного сложного обработчика раздела

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

В следующих примерах мы создадим раздел настроек для вымышленного веб-приложения. Это приложение называется DNetReporting; оно создает отчеты на основе различных источников данных, а затем либо печатает эти отчеты, либо передает их по электронной почте. Для хранения нескольких настроечных параметров приложения задействуем разделы настроек, а также обработчики разделов и другие классы. Первый шаг состоит в создании раздела настроек, который включает несколько используемых параметров.

<DNetReporting>
  <License key="b12gfdt32d2" />
  <DataSources>
    <DataSource name="Employee Database" connstring="" />
    <DataSource name="Sales Database" connstring="" />
  </DataSources>
  <Emails>
    <Email name="James Avery" address="javery@infozerk.com" />
    <Email name="Accountants" address="accounts@infozerk.com" />
  </Emails>
  <Printers>
    <Printer name="IT Printer" localname="HP Deskjet 1200" />
    <Printer name="HR Printer" localname="HP Deskjet 4050" />
  </Printers>
</DNetReporting>

Данный раздел настроек хранит ключ лицензии приложения, все источники данных, адреса электронной почты и принтеры. Следующий шаг заключается в создании записи для этого раздела настроек в разделе <configSections>.

<configSections>
  <section name="DNetReporting"
    type="DNetReporting.ConfigHandler, DNetReporting"/>
</configSections>

Теперь мы создадим обработчик раздела, считывающий эти параметры из настроечного файла. Ниже приведен код основной части обработчика раздела, сильно напоминающий обработчик раздела, созданный ранее.

C#

using System;
using System.Data;
using System.Data.SqlClient;
using System.XML;
using System.Configuration;

namespace DNetReporting
{
  public class ConfigHandler : IConfigurationSectionHandler
  {
    public object Create(object parent, object configContext,
      XmlNode section)
    {
      string sHomePage;
      sHomePage = section.Attributes.Item[0].Value;
      return sHomePage;
    }
  }
}

VB.NET

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.XML
Imports System.Configuration

Namespace DNetReporting
  Public Class ConfigHandler
    Implements IConfigurationSectionHandler
    Public Function Create(parent As Object, configContext As _
      Object, section As XmlNode) As Object Implements _
      IConfigurationSectionHandler.Create
      Dim sHomePage As String
      sHomePage = section.Attributes.Item(0).Value
      Return sHomePage
    End Function
  End Class
End Namespace

Обработчик раздела настроек должен иметь возможность унаследовать все родительские настроечные параметры. Первый параметр типа object, который называется parent, содержит параметры, наследуемые этим обработчиком. Мы сохраняем параметры в объекте Hashtable, так что через объект parent будет передаваться именно этот объект. Ниже приведен код, который следует добавить в метод Create, чтобы реализовать наследование данных.

C#

Hashtable parentConfig = (Hashtable) parent;
Hashtable config;
if (parentConfig != null)
{
  config = (Hashtable) parentConfig.Clone();
}
else
{
  config = new Hashtable();
}

VB.NET

Dim parentConfig As Hashtable = CType(parent, Hashtable)
Dim config As Hashtable
If Not (parentConfig Is Nothing) Then
  config = CType(parentConfig.Clone(), Hashtable)
Else
  config = New Hashtable()
End If

Первая строка кода преобразует тип объекта parent к типу Hashtable. Вторая строка создает Hashtable, в котором будут храниться параметры. Оператор If, с которого начинается третья строка кода, проверяет, равен ли parentConfig типа Hashtable значению null. Если Hashtable существует, то имеются параметры, которые должны быть унаследованы новым набором параметров. Если родительский Hashtable существует, то новый Hashtable будет клоном родительского Hashtable; если родительский Hashtable не существует, то будет создан новый Hashtable.

Следующим шагом в создании собственного обработчика раздела является перебор всех элементов XML и определение того, что следует делать с различными подразделами и элементами. Ниже приведен код для перебора всех элементов XML этого раздела.

C#

foreach (XmlNode child in section.ChildNodes)
{
  if(child.NodeType != XmlNodeType.Comment && child.NodeType !=
    XmlNodeType.Whitespace)
  {
    switch (child.Name)
    {
    case "License":
      config["License"] = child.Attributes.Item(0).Value;
      break;

    case "DataSources":
      config["DataSources"] = ReadSection(
      config["DataSources"], child, "connstring");
      break;

    case "Emails":
      config["Emails"] = ReadSection(config["Emails"], child,
      "address");
      break;

    case "Printers":
      config["Printers"] = ReadSection(config["Printers"],
      child, "localname");
      break;
    }
  }
}

VB.NET

Dim child As XmlNode
For Each child In section.ChildNodes
  If child.NodeType <> XmlNodeType.Comment And child.NodeType <> _
    XmlNodeType.Whitespace Then
    Select Case child.Name
    Case "License"
      config("License") = child.Attributes.Item(0).Value

    Case "DataSources"
      config("DataSources") = ReadSection( _
        config("DataSources"), child, "connstring")

    Case "Emails"
      config("Emails") = ReadSection(config("Emails"), _
        child, "address")

    Case "Printers"
      config("Printers") = ReadSection(config("Printers "), _
        child, "localname")
    End Select
  End If
Next child

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

If child.NodeType <> XmlNodeType.Comment And child.NodeType <> _
  XmlNodeType.Whitespace Then

Если узел не является комментарием или пробелом, оператор case проверяет имя узла и в зависимости от его значения выполняет определенное действие с узлом. Например, если узел называется "License", значение узла добавляется в Hashtable в ключ "License".

Для трех других типов узлов (принтеры, электронная почта и источники данных) оператор case вызывает внешний метод, так как для каждого узла возможно наличие нескольких значений. Для их обработки внешний метод создает для каждого из этих параметров Hashtable, который добавляется в Hashtable настроек. Ниже приведен метод ReadSection, который создает Hashtable, содержащий все значения для каждого раздела. Чтобы разместить все имена значений из каждого раздела, третий параметр определяет строку атрибутов значения, которые должны использоваться для каждого раздела.

C#

private Hashtable ReadSection(object parent, XmlNode section, string
  sValueAttribute)
{
  Hashtable parentConfig = (Hashtable) parent;
  Hashtable config;
  if (parentConfig != null)
  {
    config = (Hashtable) parentConfig.Clone();
  }
  else
  {
    config = new Hashtable();
  }
  foreach (XmlNode child in section.ChildNodes)
  {
    if(child.NodeType != XmlNodeType.Comment && child.NodeType !=
      XmlNodeType.Whitespace)
    {
      config[child.Attributes.GetNamedItem("name").Value] =
        child.Attributes.GetNamedItem(sValueAttribute).Va lue;
    }
  }
  return config;
}

VB.NET

Private Function ReadSection(parent As Object, section As XmlNode, _
  sValueAttribute as string) As Hashtable
  Dim parentConfig As Hashtable = CType(parent, Hashtable)
  Dim config As Hashtable
  If Not (parentConfig Is Nothing) Then
    config = CType(parentConfig.Clone(), Hashtable)
  Else
    config = New Hashtable()
  End If
  Dim child As XmlNode
  For Each child In section.ChildNodes
    If child.NodeType <> XmlNodeType.Comment And _
      child.NodeType <>XmlNodeType.Whitespace Then
      config(child.Attributes.GetNamedItem("name").Value) = _
        child.Attributes.GetNamedItem(sValueAttribute).Value
    End If
  Next child
  Return config
End Function

Первая часть этого метода в точности совпадает с кодом метода Create. Она используется для наследования всех параметров, установленных в предыдущих разделах настроек. Оператор For перебирает все дочерние узлы раздела и добавляет значения в Hashtable. Затем этот Hashtable возвращается и добавляется в Hashtable, созданный в методе Create.

На этом обработчик раздела заканчивается, но было бы здорово предоставить класс, который осуществляет доступ к этим коллекциям. Ниже приведен код примера класса для доступа к данным коллекциям без вызова метода GetConfig.

C#

using System;
using System.Collections;
using System.Configuration;

namespace DNetReporting
{
  public class ConfigSettings
  {
    public static Hashtable Printers()
    {
      Hashtable config = GetConfig();
      return (Hashtable) config["Printers"];
    }

    public static Hashtable Emails()
    {
      Hashtable config = GetConfig();
      return (Hashtable) config["Emails"];
    }

    public static Hashtable DataSources()
    {
      Hashtable config = GetConfig();
      return (Hashtable) config["DataSources"];
    }

    public static string License()
    {
      Hashtable config = GetConfig();
      string sLicense = config["License"].ToString();
      return sLicense;
    }

    private static Hashtable GetConfig()
    {
      Hashtable configTable = (Hashtable)
        ConfigurationSettings.GetConfig("DNetReporting");
      return configTable;
    }
  }
}

VB.NET

Imports System
Imports System.Collections
Imports System.Configuration

Namespace DNetReporting

  Public Class ConfigSettings

    Public Shared Function Printers() As Hashtable
      Dim config As Hashtable = GetConfig()
      Return CType(config("Printers"), Hashtable)
    End Function

    Public Shared Function Emails() As Hashtable
      Dim config As Hashtable = GetConfig()
      Return CType(config("Emails"), Hashtable)
    End Function

    Public Shared Function DataSources() As Hashtable
      Dim config As Hashtable = GetConfig()
      Return CType(config("DataSources"), Hashtable)
    End Function

    Public Shared Function License() As String
      Dim config As Hashtable = GetConfig()
      Dim sLicense As String = config("License").ToString( )
      Return sLicense
    End Function

    Private Shared Function GetConfig() As Hashtable
      Dim configTable As Hashtable = _
        CType(ConfigurationSettings.GetConfig("DNetReport ing"), _
        Hashtable)
      Return configTable
    End Function
  End Class
End Namespace

Данный класс предоставляет несколько методов для доступа к объектам Hashtable, избавляя от необходимости работать напрямую с обработчиком раздела настроек. Например, если нужно заполнить значениями из Hashtable адресов электронной почты раскрывающийся список, то можно воспользоваться следующим кодом.

C#

Hashtable htEmail = ConfigSettings.Emails();
DropDownList2.DataTextField = "Key";
DropDownList2.DataValueField = "Value";
DropDownList2.DataSource = htEmail;
DropDownList2.DataBind();

VB.NET

Dim htEmail As Hashtable = ConfigSettings.Emails()
DropDownList2.DataTextField = "Key"
DropDownList2.DataValueField = "Value"
DropDownList2.DataSource = htEmail
DropDownList2.DataBind()

Данный код создает экземпляр Hashtable с адресами почты, а затем связывает его с раскрывающимся списком.

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

Ключевые моменты

  • Для создания простой коллекции собственных настроек можно использовать несколько обработчиков разделов настроек по умолчанию, включая SingleTagSectionHandler, NameValueFileSectionHandler и DictionarySectionHandler.
  • Для создания собственного обработчика раздела настроек можно использовать интерфейс IConfigurationSectionHandler.
  • Вы можете создать сложный обработчик раздела настроек, который использует несколько разделов и несколько объектов коллекций.
  • Чтобы избежать использования базы данных для хранения небольшого количества информации используйте собственные разделы настроек.
 источник: http://www.INTUIT.ru 


 

13 центов(0,13$) за клик, выплаты через WebMoney каждый вторник +10% с рефералов

Мы выкупаем 100% трафа! $12 за 1000 хостов (РФ), и до $4 за 1000 хостов (зарубежный траф) + 10% с дохода Ваших рефералов!
 Выплаты через
WebMoney

~80-100$ за1000 хостов 2.5$ за 1 смс.
реф. процент - 10 %Выплаты происходят раз в неделю, в четверг на
WebMoney
 
 

 

____________________________

Посмотреть порно видео в онлайне »

_______________________________

 

   
   
Сайт управляется системой uCoz