2008-11-02 9 views
1

Quelqu'un sait s'il existe déjà un validateur pour les chaînes "type"?Validateur pour les chaînes de caractères?

Je veux vous assurer que les attributs de type dans ma config personnalisée sont une des options suivantes:

 
type="TopNamespace.SubNameSpace.ContainingClass, MyAssembly" 
type="TopNamespace.SubNameSpace.ContainingClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089" 

Une écriture on est assez facile, je ne veux pas réinventer la roue.

+0

quel langage/environnement utilisez-vous? Si vous ajoutez cela aux tags, vous obtiendrez de meilleures réponses. – nickf

+0

Ne vous occupez pas des étiquettes, mettez-le dans le titre. –

+0

ce sont des noms de type .NET – Jimmy

Répondre

0

Vous obtiendrez une erreur avec l'analyse globale des erreurs de resharper s'il ne trouve pas l'espace de noms ou la classe, mais cela n'est pas toujours utile si vous faites référence à un plugin.

probablement le plus simple est de mettre votre code pour charger le domaine de l'application dans un bloc try catch.

Si la DLL est dans la corbeille, elle sera chargée au démarrage, mais elle ne lancera pas d'erreur tant que vous ne l'utiliserez pas, donc si vous venez de créer une instance de ContainingClass. Vous pouvez extraire les espaces de noms à partir de la configuration, puis essayer d'utiliser chaque classe.

+0

Chargement du type est facile. Qu'est-ce que je suis après est de vérifier la chaîne de la config avant d'essayer. Écrire le validateur pour cela est facile. Je ne voulais pas le faire si quelqu'un existe déjà dans .NET. – claco

+0

il n'y a rien que j'ai vu, mais le Regex pour ça ne devrait pas être trop dur. –

0

Je suis assez sûr qu'il n'y a rien de prévu dans le cadre pour cela. Il y a un couple de results on regexlib.com. N'importe lequel d'entre eux devrait fonctionner pour le scénario que vous avez décrit. Cependant, gardez à l'esprit qu'aucun d'entre eux ne supportera correctement la syntaxe pour spécifier les types génériques. Pour gérer correctement cela, une expression régulière seule ne sera pas suffisante - vous devrez traiter récursivement la même expression régulière par rapport aux arguments de type générique. Par exemple, considérons les noms de type suivants:

List<> 
"System.Collections.Generic.List`1" 

List<string> 
"System.Collections.Generic.List`1[[System.String]]" 

Dictionary<string, string> 
"System.Collections.Generic.Dictionary`2[[System.String],[System.String]]" 

Dictionary<string, List<string>> 
"System.Collections.Generic.Dictionary`2[[System.String],[System.Collections.Generic.List`1[[System.String]]]]" 

Pour plus d'informations, consultez la documentation MSDN sur Type.AssemblyQualifiedName.

2

Je ne suis pas sûr de ce que vous entendez par « config personnalisée », mais si vous travaillez toujours dans le cadre de la configuration de .NET (par exemple, le développement d'une coutume configurationSection/configurationElement), vous pouvez simplement taper le property en tant que système. Type (au lieu de chaîne) et .NET effectuera la validation automatiquement.

0

La suggestion d'Abraham Pinzur est correcte si vous écrivez une section de configuration personnalisée.

Type.GetType(...) vous permet de le faire à la main.

Questions connexes