2011-08-18 15 views
5

Estoy usando una biblioteca de terceros que contiene varios métodos de extensión además de IQueryable. Para utilizar estos métodos de extensión, no deseo que mi aplicación esté llena de declaraciones en el espacio de nombres de terceros en el que reside el método de extensión.Métodos de extensión: cambiar el espacio de nombres

Esto es para que pueda desconectar la biblioteca en algún momento cercano futuro lo más fácil posible. Sin embargo, no estoy seguro de cuál es la mejor manera de hacerlo. Una opción que contemplé fue crear mi propio conjunto de métodos de extensión dentro del proyecto (entonces puedo controlar el espacio de nombres). El problema con esto es que no puedo ver cómo puedo mantener el nombre del método de extensión existente. Por ejemplo:

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); 
     } 
    } 
} 

Puede ver el problema aquí. Cuando trato de llamar al método de extensión de terceros dentro del mío, en realidad se llama a sí mismo creando un ciclo infinito.

Agradecería la ayuda. Gracias

Respuesta

4

Usted no tiene que utilizar métodos de extensión como los métodos de extensión, puede utilizarlos como métodos estáticos ... por lo que podría llamar a la tercera parte Fetch método:

ThirdPartyNamespace.Fetch(queryable, selector) 
+0

Hola, gracias por su respuesta. – nfplee

1

Para resolver el problema el nombre, que fácilmente podría invocar el método de extensión como el método estático que realmente es:

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

Una vez dicho esto, no entiendo su motivación. ¿Por qué no solo quieres usar el espacio de nombres de terceros? ¿Cuál es su problema con el uso de la directiva al comienzo del archivo que necesita este método de extensión? De todos modos, tendrá numerosas directivas de uso. Si esta lista es demasiado larga para usted por algún motivo, simplemente envuélvala en una región y contraiga esa región:

#region 

using Namespace1; 
using Namespace2; 
using Namespace3; 

#endregion 
+0

Hola, gracias por tu respuesta. La razón para hacer esto es que el método de extensión es aparte de NHibernate y deseo migrar a Entity Framework en algún momento en el futuro. Por lo tanto, trato de eliminar tanta dependencia de NHibernate como pueda. – nfplee

Cuestiones relacionadas