2010-09-20 12 views
8

estoy teniendo una interfaz genérica como:¿Cómo se definen los métodos de extensión para la clase genérica?

public IRepository<T> 
{ 

    void Add(T entity); 

} 

y una clase como:

public class Repository<T>:IRepository<T> 
{ 

    void Add(T entity) 
    {  //Some Implementation 
    } 

} 

Ahora quiero hacer un método de extensión de la interfaz anterior. Hice la siguiente clase:

public static class RepositoryExtension 

{ 

    public static void Add(this IRepository<T> dataAccessRepository, T entity, string additionalValue) 

    { 
     //Some Implementation 
    } 

} 

Pero me sale un error en la extensión Agregar método. No reconoce el tipo 'T' que he pasado a IRepository. No puedo pasar este tipo a mi clase de métodos de extensión, por ejemplo, RepositoryExtension < T>. Por favor guía de la manera apropiada.

Respuesta

17
public static void Add<T>(this IRepository<T> dataAccessRepository, T entity, string additionalValue) 

Probar eso. Aviso la <T> inmediatamente después de la opción Agregar

+0

Pero en este caso Siempre que llame a este método de extensión, pasaría este Tipo. Ahora mismo me gusta: IRepository < Employee > employeRepository = new Repository < Employee >(); employeeRepository.Add (entidad); Pero en el caso de que sugiriera que pasaría el tipo a El método de extensión también como: employeeRepository < Employee > (entidad, "someValue"); –

+1

¿Lo has probado? C# y .Net averiguarán el tipo basado en el tipo de IRepository – Rohith

+0

Sí, lo probé y funcionó. Muchas gracias Rohith por tu ayuda. Estaba haciendo exactamente lo mismo, pero también estaba pasando el Tipo cuando estaba llamando al método. Lo intenté sin pasar el tipo 'T' y .Net averigué :) Muchas gracias –

Cuestiones relacionadas