2008-11-26 15 views
0

Je suis sur le point de définir une interface dans mon application que les rédacteurs de plug-ins peuvent mettre en œuvre pour fournir des capacités «d'exportation» définies par l'utilisateur. Ça va ressembler à quelque chose comme ceci:Comment puis-je informer l'implémenteur de mon interface que le paramètre "path" représente un dossier?

public interface IFooExporter 
{ 
    void ExportFoo(Foo foo, string path); 
} 

Cependant, je dois laisser le plug-in écrivains savent (explicitement, non seulement dans la documentation) que « chemin » représente un dossier, pas un nom de fichier. C'est leur responsabilité de créer les fichiers dans le cadre du processus d'exportation.

Quelle est la meilleure façon de faire en sorte qu'un chemin d'accès soit un dossier et non un nom de fichier? Ma meilleure estimation est en ce moment à utiliser DirectoryInfo au lieu de chaîne:

public interface IFooExporter 
{ 
    void ExportFoo(Foo foo, DirectoryInfo folder); 
} 

Est-ce une bonne solution, ou y at-il des pièges que je ne suis pas au courant avec le passage des instances DirectoryInfo autour?

+0

Vous pouvez soit les forcer à utiliser DirectoryInfo, ce qui n'est pas une mauvaise chose, ou lancer une ArgumentException si vous utilisez une chaîne et qu'ils passent un nom de fichier – TimothyP

+0

Dans l'autre sens, Timothy. Je vais leur passer la chaîne (ceci est pour les auteurs de plug-ins). Je veux m'assurer qu'ils implémentent la méthode de telle manière qu'elle ne suppose pas que la chaîne représente un nom de fichier. –

Répondre

1

Si vous spécifiez une chaîne, il n'y a aucun moyen d'arrêter la transmission d'une chaîne.

+0

Renforcement positif! Je vais laisser cette question ouverte pendant un moment, et si personne ne trouve une meilleure solution ou un argument convaincant * contre * DirectoryInfo, alors je signalerai cela comme la réponse et irai avec cette idée. –

+0

Si vous allez sur la route DirectoryInfo, assurez-vous de vous rappeler que vous passez un objet avec des propriétés mutables. – sliderhouserules

+0

Dans ce cas, une nouvelle classe héritant de DirectoryInfo, le rendant en lecture seule, est également une possibilité. – benPearce

1

Utilisez les commentaires XML, ils apparaîtront dans la fenêtre contextuelle Intellisense de Visual Studio.

/// <summary> 
/// Type in the text you want to appear 
/// </summary> 
+0

Comme je l'ai dit dans la question, cependant, je veux que cela soit explicite dans l'interface - pas seulement une question de documentation. –

+0

Les commentaires dans IntelliSense proviennent de l'implémentation concrète, pas de l'interface. – benPearce

1

Nommez votre variable de manière plus explicite. Est-ce simplement un chemin? Vous dites que non, mais vous le laissez toujours avec un nom générique. Nommez-le folderPath et il y aura moins de confusion et moins besoin de le communiquer explicitement aux implémenteurs. Parce que vous ne mettez pas en œuvre la solution, je suis d'accord avec vous la solution de l'utilisation de DirectoryInfo comme un paramètre

+0

Oui, le nommage des paramètres fait partie de la réponse (d'où mon nom de "dossier" dans la réponse de DirectoryInfo), mais je ne sous-estime pas la stupidité des auteurs de compléments potentiels ici! Une chaîne est une chaîne et pourrait être n'importe quoi, malgré le nom du paramètre. –

+0

Je ne comprends pas pourquoi vous devez "imposer" quoi que ce soit. Ces implémenteurs implémentent le côté réception de quelque chose ici, non? Votre code ne va-t-il pas envoyer la valeur dans ce paramètre? Sinon, votre question n'est pas très claire pour moi. – sliderhouserules

+0

Oui, mon code fournira le paramètre. J'essaie de le rendre infaillible dans un sens "fortement typé". Si je passe une chaîne et que l'imlpementor décide de la traiter comme un nom de fichier, son exportateur va s'écraser et brûler. Je sais que c'est de sa faute mais je veux aider à prévenir cela à l'avance. –