7
votes

Global "Utilisation" Directives dans VS2010 / C #?

Je suis sûr que je sais que je connais la réponse, mais je me demande s'il y a un moyen de définir une directive "Utilisation" globale dans mes projets C # afin que je n'ai pas à répéter la directive sur chaque fichier de code .

Mon intérêt est vraiment enraciné avec l'introduction de méthodes d'extension dans le cadre .NET. Le seul moyen d'utiliser une méthode d'extension consiste à définir une directive à l'aide de l'espace de noms contenant les méthodes d'extension. Sans l'utilisation de la directive, je perds des capacités Intellensense pour les méthodes d'extension qui signifie que je ne verrai pas toujours quelles méthodes sont disponibles.

En tant que développeur-cadre, en veillant à ce que les types et les méthodes fournis dans le cadre sont clairs et disponibles pour consommer des développeurs est clé pour moi. Bien que la documentation et la formation servent leur objectif, j'ai constaté que la plupart des Devs touchent la période et font défiler la liste IntelliSense pour voir quelles méthodes et propriétés sont disponibles. Même s'ils vont au navigateur d'objet ou affichent la documentation de référence, ils ne sauront pas sur une méthode d'extension à moins qu'ils ne le savent. C'est là que IntelliSense entre dans.

et, bien que je puisse ajouter l'utilisation de la directive à l'aide du modèle VS utilise, l'option "Supprimer et trier" dans VS supprimera la directive référençant les méthodes d'extension si l'on ne l'utilise pas.

Donc, tout ce qui étant dit, existe-t-il un moyen de définir une directive "Utilisation" globale dans VS 2010? Sinon, aucune chance qu'elle soit envisagée par SM pour l'avenir?


2 commentaires

Ceci est auto-induit par la méthode d'extension abusif. Dur sur les Devs en ce moment pour trouver le bon #Utilisation. Masseur quelques années à partir de maintenant lorsque quelqu'un d'autre doit lire le code.


Je ne suis pas d'accord. Les méthodes d'extension servent un but mais ne sont utiles que si vous savez qu'ils sont là. Par défaut, quand il n'y a pas d'utilisation de la directive, ils ne sont pas disponibles. Donc, ce n'est pas une question du développement qui trouve le droit à l'aide de la déclaration si elles doivent en savoir plus sur la méthode. Et, avec la fonctionnalité de résolution intégrée dans VS ainsi que des outils tels que Resharper et al, la recherche de la directive appropriée en utilisant est beaucoup plus facile.


6 Réponses :


6
votes

Vous pouvez placer vos méthodes d'extension dans l'espace de noms global, en veillant à ce que les classes contenant ne soient pas déclarées dans un espace de noms. Cela les rendra à l'échelle mondiale.

Comme pour les espaces de noms par défaut - en dehors de la modification des modèles VS, cela n'est pas possible.

Bien sûr, il est toujours possible la SEP le considérera. Peu probable, mais possible.

Au lieu de rechercher une solution technique, vous devriez peut-être examiner vos collègues développeurs et fournir une convention concernant les méthodes d'extension (par exemple, un schéma de localisation / espace de noms connu)?


3 commentaires

Je suis d'accord avec votre dernier paragraphe; Personne (eh bien, peut-être que surtout personne) ne veut utiliser un cadre qui pollue son espace de noms global, ils veulent une utilisation ciblée du cadre lorsqu'ils le souhaitent et qu'ils disparaissent quand il n'est pas recherché.


Comme je l'ai dit, l'éducation et la documentation ne vont que jusqu'à présent et la grande majorité des personnes (Devs incluses) conservent en postulant. Bien que nous puissions fournir un matériau de formation et de référence ainsi que des instances de capture pendant les critiques de code, il serait toujours agréable que les méthodes soient affichées dans IntelliSense. Si Resharber l'accomplit, comme indiqué ci-dessous, je pense que je vais bien.


@Sonofilate - Autant que je sache, Resharper fait pas Ajoutez automatiquement à l'aide des déclarations .



0
votes

Pour répondre à votre problème réel, si vous mettez votre classe statique avec des extensions dans NO Espace de noms, il sera disponible partout. Utilisez avec soin!


1 commentaires

Je n'avais pas pensé à "cacher" les méthodes de vulgarisation de cette manière, mais je conviens que cela ne semble pas comme une bonne pratique.



0
votes

Si c'est vraiment important pour vous, vous pouvez acheter votre entreprise à Restomer et l'installer sur toutes les machines de développement, ce qui vous donnera IntelliSense pour ces méthodes, avec l'option "Auto Ajouter" l'utilisation de la directive.

D'après ce que j'ai entendu (ne l'avez pas utilisé moi-même), le Restomise Scannez toutes les assemblages possibles et je suppose que vous pouvez la configurer pour ajouter automatiquement la directive "Utilisation" lors de la création de la nouvelle classe, bien que je ne suis pas sûr à 100% dans cette .


2 commentaires

Je vais devoir regarder Restomer à nouveau pour voir si cela montre les méthodes d'extension d'IntelliSense même lorsqu'il n'y a pas d'utilisation de la directive. Cela résoudrait mon problème et nous avons déjà un resharper en place sur tous les systèmes de développement. Malheureusement, il s'agit de la fonctionnalité d'organisation intégrée de Resharber qui trie et supprime inutilisé avec des directives sur la sauvegarde qui a apporté cette situation à une tête. Mais, s'ils sont toujours affichés dans IntelliSense, je pense que tout va bien.


@Sonofpirate - Je crois que c'est peut-être seulement dans une version plus récente .: /



0
votes

Vous pouvez créer des modèles de fichier .NET pour les classes contenant votre utilisation de directives.

Voir Créer des modèles de projet et d'élément ( https://msdn.microsoft. com / fr-nous / bibliothèque / ms247121.aspx ).

Vous pouvez enregistrer le modèle dans le cadre du projet que vous avez vos extensions dans; Cependant, cela se fait mieux dans un projet différent.


0 commentaires

0
votes

in vs 2010 code> Il n'y a aucune option pour le faire, mais dans vs 2022 code> avec C # 10.0 code> Vous pouvez utiliser Global Usings .

global using <TheNamespace>;


0 commentaires

0
votes

Le Global en utilisant la directive est un nouveau Caractéristique linguistique en C # 10. Lorsque vous exécutez sur .NET 6 Il existe également implicit global à l'aide de directives disponibles dans Certains espaces de noms .


0 commentaires