2010-04-21 4 views
3

J'ai créé une classe de configuration client Rapports. J'ai ensuite créé une autre classe appelée "ReportsCollection". Lorsque j'essaye de faire le "ConfigurationManager.GetSection()", il ne remplit pas ma variable de collection. Quelqu'un peut-il voir des erreurs dans mon code?Création d'une configuration personnalisée

Voici la classe de collection:

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); } 
    } 
} 

Voici la classe des rapports:

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); } 
    } 
} 
} 

Et voici le code très simple pour créer la variable:

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

EDIT Ajouté 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="[email protected]" 
    </Recipients> 
</Reports> 
</ReportGroup> 

Répondre

0

Je n'ai pas écrit sections de configuration pendant un certain temps, mais sur le haut de ma tête vos méthodes CreateNewElement() lèvent des exceptions .. Faites-les revenir au moins des entrées fictives, peut-être c'est la raison ..)

De plus, affichez l'élément reportsCollection dans votre fichier web.config .. est-il enregistré correctement?

4

Vous devriez vérifier la série en trois parties de Jon Rista sur la configuration .NET 2.0 sur CodeProject.

Hautement recommandé, bien écrit et très utile!

De plus, il existe un complément Configuration Section Designer pour Visual Studio qui est extrêmement utile pour créer des sections de configuration personnalisées - il dispose d'un concepteur visuel qui crée toutes les classes XSD et classes nécessaires en arrière-plan.

Marc

+0

+1 - ressource précieuse. Des exemples pourraient être un peu plus ciblés, mais vous obtiendrez partout où vous devez aller. –

+0

+1, bien que vous deviez télécharger et compiler la source pour VS2010. – jerhewet

Questions connexes