6

Sono abbastanza sicuro di sapere la risposta, ma mi chiedo se c'è un modo per definire una direttiva globale "using" nei miei progetti C# in modo che non debba ripetere la direttiva sopra ogni file di codice.Direttive globali "using" in VS2010/C#?

Il mio interesse è davvero radicato nell'introduzione dei metodi di estensione in .NET Framework. L'unico modo per utilizzare un metodo di estensione è definire una direttiva using per lo spazio dei nomi contenente i metodi di estensione. Senza la direttiva using, perdo le capacità di Intellisense per i metodi di estensione, il che significa che non vedrò sempre quali metodi sono disponibili.

Come sviluppatore di framework, assicurandomi che i tipi e i metodi forniti nel framework siano chiari e disponibili per gli sviluppatori che consumano è la chiave per me. Mentre la documentazione e la formazione servono al loro scopo, ho scoperto che la maggior parte degli sviluppatori percorre il periodo e scorre l'elenco Intellisense per vedere quali metodi e proprietà sono disponibili. Anche se si collegano al Visualizzatore oggetti o visualizzano la documentazione di riferimento, non saranno a conoscenza di un metodo di estensione a meno che non lo sappiano. È qui che entra in gioco Intellisense.

E, mentre posso aggiungere la direttiva using al modello VS, l'opzione "Remove and Sort" in VS rimuoverà la direttiva che fa riferimento ai metodi di estensione se uno non viene utilizzato .

Quindi, tutto ciò detto, esiste un modo per definire una direttiva globale "using" in VS 2010? In caso contrario, qualche possibilità è stata presa in considerazione dalla MS per il futuro?

+0

Questo è autoindotto dall'abuso del metodo di estensione. Al momento duro con gli sviluppatori per trovare l'uso corretto.Omicidio tra un paio di anni da quando qualcun altro deve leggere il codice. –

+1

Non sono d'accordo. I metodi di estensioni hanno uno scopo ma sono utili solo se sai che ci sono. Per impostazione predefinita, quando non si utilizza la direttiva, non sono disponibili. Quindi non è una questione di dev che trova la giusta istruzione usando se devono prima conoscere il metodo. Inoltre, grazie alla funzionalità Risolvi integrata in VS e agli strumenti come ReSharper e altri, trovare la corretta direttiva using è molto più semplice. – SonOfPirate

risposta

6

È possibile inserire i metodi di estensione nello spazio dei nomi globale, assicurandosi che le classi contenenti non siano dichiarate all'interno di uno spazio dei nomi. Questo li renderà disponibili a livello globale.

Come per gli spazi dei nomi di default, a parte cambiare i modelli VS, questo non è possibile.

Ovviamente, è sempre possibile che la MS considererà. Improbabile, ma possibile.

Invece di cercare una soluzione tecnica, forse dovresti studiare i tuoi colleghi sviluppatori e fornire una convenzione sui metodi di estensione (ad esempio, uno schema di ubicazione/spazio dei nomi noto)?

+0

Sono d'accordo con il tuo ultimo paragrafo; nessuno (beh, forse per lo più nessuno) vuole usare un framework che inquini il loro spazio dei nomi globale, vogliono un uso mirato del framework quando lo vogliono e per farlo scomparire quando non lo si desidera. – Randolpho

+0

Come ho detto, l'istruzione e la documentazione vanno solo così lontano e la stragrande maggioranza delle persone (gli sviluppatori inclusi) mantengono l'applicazione. Mentre siamo in grado di fornire materiale di riferimento e di riferimento oltre a catturare le istanze durante le revisioni del codice, sarebbe comunque utile se i metodi fossero visualizzati in Intellisense. Se ReSharper realizza questo, come indicato di seguito, allora penso che sto bene. – SonOfPirate

+0

@SonOfPirate - per quanto ne so, Resharper fa ** non ** aggiunge automaticamente le istruzioni 'using'. – Oded

0

Per rispondere al tuo problema reale, se inserisci la tua classe statica con le estensioni nello spazio dei nomi no, sarà disponibile ovunque. Usare con cura!

+0

Non avevo pensato di "nascondere" i metodi di estensione in questo modo, ma sono d'accordo sul fatto che non sembra una buona pratica. – SonOfPirate

0

Se è davvero importante per te, puoi avere la tua azienda acquistare ReSharper e installarlo su tutti i computer di sviluppo, avendo questo ti darà Intellisense per quei metodi, con l'opzione di "aggiungere automaticamente" la direttiva using.

Da quello che ho sentito (non l'ho usato io stesso) il ReSharper esegue la scansione di tutti gli assembly possibili e presumo che sia possibile configurarlo per aggiungere automaticamente la direttiva "using" quando si crea una nuova classe, anche se non sono sicuro al 100% Questo.

+0

Dovrò guardare nuovamente ReSharper per vedere se mostra i metodi di estensione in Intellisense anche quando non si usa la direttiva. Questo risolverebbe il mio problema e abbiamo già ReSharper installato su tutti i sistemi di sviluppo. Sfortunatamente, è la funzione di organizzazione incorporata di ReSharper che ordina e rimuove le direttive inutilizzate che non hanno portato a questa situazione. Ma, se sono ancora visualizzati in Intellisense, penso che tutto sia buono. – SonOfPirate

+0

@SonOfPirate - Credo di sì, forse solo nella versione più recente però ..: / –

0

È possibile creare modelli di file .net per le classi che contengono le direttive di utilizzo.

Vedere Creazione di modelli di progetto e oggetto (https://msdn.microsoft.com/en-us/library/ms247121.aspx).

È possibile salvare il modello come parte del progetto in cui si trovano le estensioni; tuttavia, è meglio farlo in un altro progetto.