2010-02-15 7 views
0

Voici l'erreur que je reçois avec le code collé ci-dessous.Comment implémenter ConfigurationElement dans C#?

Impossible de créer l'instance de la classe ZDRCreatorTests.ZDRCreatorTests. Erreur: System.Configuration.ConfigurationErrorsException: La valeur par défaut de la propriété 'indexedFolder' ne peut pas être analysée. L'erreur est: Impossible de trouver un convertisseur qui prend en charge la conversion en/de chaîne pour la propriété « indexedFolder » de type « DirectoryInfo » ..

namespace ZDRCreator 
{ 
    public class ZDRCreatorElement : ConfigurationElement 
    { 
     // Create the element. 
     public ZDRCreatorElement() 
     { } 

     // Get or set the IndexedFolder 
     [ConfigurationProperty("indexedFolder", DefaultValue = "", IsRequired = true)] 
     public DirectoryInfo IndexedFolder { 
      get { return (DirectoryInfo)this["indexedFolder"]; } 
      set { this["indexedFolder"] = value; } 
     } 

     // Get or set the OutputFolder 
     [ConfigurationProperty("outputFolder", DefaultValue = "", IsRequired = true)] 
     public DirectoryInfo OutputFolder { 
      get { return (DirectoryInfo)this["outputFolder"]; } 
      set { this["outputFolder"] = value; } 
     } 

     // Get or set the ZDRFile 
     [ConfigurationProperty("ZDRFile", DefaultValue = "", IsRequired = true)] 
     public FileInfo ZDRFile { 
      get { return (FileInfo)this["ZDRFile"]; } 
      set { this["ZDRFile"] = value; } 
     } 

     // Get or set the overwriteOutput flag 
     [ConfigurationProperty("overwriteOutput", DefaultValue = "false", IsRequired = true)] 
     public bool OverwriteOutput { 
      get { return (bool)this["overwriteOutput"]; } 
      set { this["overwriteOutput"] = value; } 
     } 

     // Get or set the OutputFile 
     [ConfigurationProperty("outputFile", DefaultValue = "", IsRequired = true)] 
     public String OutputFile { 
      get { return (String)this["outputFile"]; } 
      set { this["outputFile"] = value; } 
     } 
     // Get or set the OutputFile 
     [ConfigurationProperty("pathMask", DefaultValue = "", IsRequired = true)] 
     public String PathMask { 
      get { return (String)this["pathMask"]; } 
      set { this["pathMask"] = value; } 
     } 
    } 
} 

Je me rends compte de l'erreur est parce que je suis en train de mettre une chaîne dans un objet DirectoryInfo. Ma question est la suivante: suis-je supposé ne stocker que des chaînes ou des types de données primitifs lus à partir du xml, puis les convertir en d'autres objets une fois le xml lu? OU, y a-t-il un endroit où je peux aller de l'avant et les construire dans l'objet qui sera utilisé en interne. Où se produira la validation de l'intrant?

Répondre

1

Je sais que cela ne répond pas directement à votre question, mais je fortement vous encourageons à jeter un oeil à la Configuration Section Designer project on CodePlex. Il vous donnera une expérience de conception pour les sections de configuration dans votre application, en générant le code de classe pour vous à partir du concepteur, ainsi que des modèles pour les mettre dans votre fichier de configuration. Avoir à faire tout cela seul, à la main, est très, très fastidieux, et je n'ai pas encore vu une situation que le Concepteur de Section de Configuration ne gère pas.

+0

Tout ce que vous dites est entièrement vrai. CSD est un outil incroyable, mais est presque une version complète de Visual Studio derrière ces jours. Tellement triste de le voir languir. – QueueHammer

3

Vous pouvez ajouter TypeConventerAttribute avec un convertisseur qui va convertir la chaîne (qui viendra de la config) de/vers le DirectoryInfo. Le convertisseur est une classe dérivée de TypeConverter.

[ConfigurationProperty("ZDRFile", DefaultValue = "", IsRequired = true)] 
[TypeConverter(typeof(YourCustomFileInfoTypeConverter))] 
public FileInfo ZDRFile { 
    get { return (FileInfo)this["ZDRFile"]; } 
    set { this["ZDRFile"] = value; } 
} 
+1

J'ai préféré votre réponse. Et pour ceux qui tombent dessus plus tard, voici un article MSDN qui vous guidera dans la création d'un convertisseur de type personnalisé: http://msdn.microsoft.com/en-us/library/ayybcxe5.aspx –

Questions connexes