Создание пользовательской конфигурации - PullRequest
3 голосов
/ 21 апреля 2010

Я создал класс конфигурации клиента Reports. Затем я создал еще один класс под названием «ReportsCollection». Когда я пытаюсь выполнить «ConfigurationManager.GetSection ()», он не заполняет переменную моей коллекции. Кто-нибудь может увидеть ошибки в моем коде?

Вот класс коллекции:

public class ReportsCollection : ConfigurationElementCollection
{
    public ReportsCollection()
    {
    }

    protected override ConfigurationElement CreateNewElement()
    {
        throw new NotImplementedException();
    }

    protected override ConfigurationElement CreateNewElement(string elementName)
    {
        return base.CreateNewElement(elementName);
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        throw new NotImplementedException();
    }

    public Report this[int index]
    {
        get { return (Report)BaseGet(index); }
    }
}

Вот класс отчетов:

public class Report : ConfigurationSection
{
    [ConfigurationProperty("reportName", IsRequired = true)]
    public string ReportName
    {
        get { return (string)this["reportName"]; }
        //set { this["reportName"] = value; }
    }

    [ConfigurationProperty("storedProcedures", IsRequired = true)]
    public StoredProceduresCollection StoredProcedures
    {
        get { return (StoredProceduresCollection)this["storedProcedures"]; }
    }

    [ConfigurationProperty("parameters", IsRequired = false)]
    public ParametersCollection Parameters
    {
        get { return (ParametersCollection)this["parameters"]; }
    }

    [ConfigurationProperty("saveLocation", IsRequired = true)]
    public string SaveLocation
    {
        get { return (string)this["saveLocation"]; }
    }

    [ConfigurationProperty("recipients", IsRequired = true)]
    public RecipientsCollection Recipients
    {
        get { return (RecipientsCollection)this["recipients"]; }
    }
}

public class StoredProcedure : ConfigurationElement
{
    [ConfigurationProperty("storedProcedureName", IsRequired = true)]
    public string StoredProcedureName
    {
        get { return (string)this["storedProcedureName"]; }
    }
}

public class StoredProceduresCollection : ConfigurationElementCollection
{
    protected override ConfigurationElement CreateNewElement()
    {
        throw new NotImplementedException();
    }

    protected override ConfigurationElement CreateNewElement(string elementName)
    {
        return base.CreateNewElement(elementName);
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        throw new NotImplementedException();
    }

    public StoredProcedure this[int index]
    {
        get { return (StoredProcedure)base.BaseGet(index); }
    }
}
}

А вот очень простой код для создания переменной:

ReportsCollection reportsCollection = (ReportsCollection) System.Configuration.ConfigurationManager.GetSection("ReportGroup");

EDIT Добавлен App.Config

<configSections>
<sectionGroup name="ReportGroup">
  <section name="Reports" type="ReportsGenerator.ReportsCollection"/>
</sectionGroup>
</configSections>
<ReportGroup>
<Reports name="DailyIssues" SaveLocation="">
  <StoredProcedures>
    <add StoredProcedureName="RPTDailyIssues" />
    <add StoredProcedureName="RPTNoIssues" />
  </StoredProcedures>
  <Parameters>
    <add ParameterName="@FromDate" />
    <add ParameterName="@ThruDate" />
  </Parameters>
  <Recipients>
    <add RecipientName="me@mycompany.com"
  </Recipients>
</Reports>
</ReportGroup>

Ответы [ 2 ]

4 голосов
/ 21 апреля 2010

Вам следует ознакомиться с серией из трех частей, посвященной Джону Ристе, по настройке .NET 2.0 в CodeProject.

Настоятельно рекомендуется, хорошо написано и чрезвычайно полезно!

Кроме того, имеется Конструктор разделов конфигурации надстройка для Visual Studio, которая чрезвычайно полезна для создания пользовательских разделов конфигурации - она ​​имеет визуальный конструктор, который создает все необходимые XSD и классы в фоновом режиме.

Марк

0 голосов
/ 21 апреля 2010

Я некоторое время не писал разделы конфигурации, но изо всех сил ваши методы CreateNewElement () генерируют исключения .. Сделайте так, чтобы они по крайней мере возвращали фиктивные записи, может, в этом причина ...)

Кроме того, покажите элемент reportsCollection в своем файле web.config .. он зарегистрирован правильно?

...