2011-08-18 33 views
5

Sto utilizzando una libreria di terze parti che contiene molti metodi di estensione su IQueryable. Per utilizzare questi metodi di estensione non desidero avere la mia applicazione piena di istruzioni usando lo spazio dei nomi di terze parti in cui risiede il metodo di estensione.- Modifica dello spazio dei nomi

Questo è così che posso passare la libreria a volte nel vicino futuro il più facilmente possibile. Tuttavia non sono sicuro di quale sia il modo migliore per farlo. Un'opzione che ho preso in considerazione era quella di creare il mio insieme di metodi di estensione all'interno del progetto (quindi posso controllare lo spazio dei nomi). Il problema con questo è che non riesco a vedere come posso mantenere il nome del metodo di estensione esistente. Ad esempio:

namespace MyProject.Extensions { 
    public static class IQueryableExtension { 
     public static IQueryable<T> Fetch<T, K>(this IQueryable<T> queryable, Expression<Func<T, K>> selector) { 
      return queryable.Fetch(selector); 
     } 
    } 
} 

Potresti vedere il problema qui. Dove sto provando a chiamare il metodo di estensione di terze parti all'interno del mio, in realtà si chiama a creare un ciclo infinito.

Apprezzerei l'aiuto. Grazie

risposta

4

Non è necessario utilizzare metodi di estensione come metodi di estensione, è possibile utilizzare come metodi statici ... così si può chiamare l'3a parte Fetch metodo:

ThirdPartyNamespace.Fetch(queryable, selector) 
+0

Ciao grazie per la tua risposta. – nfplee

1

Per risolvere il problema con il nome, si potrebbe facilmente richiamare il metodo di estensione come il metodo statico che realmente è:

return Third.Party.Namespace.Fetch(queryable, selector); 

detto questo, non capisco la vostra motivazione. Perché non vuoi semplicemente usare lo spazio dei nomi di terze parti? Qual è il tuo problema con l'uso della direttiva all'inizio del file che richiede questo metodo di estensione? Avrai comunque numerose direttive di utilizzo. Se per qualche motivo questa lista è troppo lunga per te, ti basterà racchiuderla in una regione e comprimerla:

#region 

using Namespace1; 
using Namespace2; 
using Namespace3; 

#endregion 
+0

Ciao grazie per la tua risposta. La ragione per fare questo è che il metodo di estensione è a parte NHibernate e desidero migrare a Entity Framework in futuro. Quindi sto cercando di rimuovere tutta la dipendenza da NHibernate che posso. – nfplee

Problemi correlati