2010-09-20 34 views
8

Tôi gặp một giao diện chung như:Cách xác định các phương thức mở rộng cho lớp chung?

public IRepository<T> 
{ 

    void Add(T entity); 

} 

và một lớp học như:

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

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

} 

Bây giờ tôi muốn thực hiện một phương pháp mở rộng của giao diện ở trên. Tôi đã thực hiện các lớp sau:

public static class RepositoryExtension 

{ 

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

    { 
     //Some Implementation 
    } 

} 

Nhưng tôi gặp lỗi trong phần mở rộng Thêm phương pháp. Nó không nhận ra Type 'T' tôi đã chuyển tới IRepository. Tôi không thể chuyển loại này cho lớp Phương thức Extenstion của tôi, tức là RepositoryExtension < T>. Vui lòng hướng dẫn cách thích hợp.

Trả lời

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

Hãy thử điều đó. Thông báo các <T> ngay sau khi Add

+0

Nhưng trong trường hợp này bất cứ khi nào tôi gọi phương thức mở rộng này, tôi sẽ chuyển Loại này. Ngay bây giờ tôi làm như thế này: IRepository < Employee > employeRepository = new Repository < Employee >(); employeeRepository.Add (thực thể); Nhưng trong trường hợp bạn đề nghị tôi sẽ chuyển loại này sang Phương thức mở rộng quá: employeeRepository < Employee > (thực thể, "someValue"); –

+1

Bạn đã thử chưa? C# và .Net sẽ tìm ra loại dựa trên kiểu của IRepository – Rohith

+0

vâng tôi đã thử và nó đã hoạt động. Cảm ơn rất nhiều Rohith vì sự giúp đỡ của bạn. Tôi đã chính xác làm như vậy nhưng tôi cũng đã vượt qua Type khi tôi gọi phương thức này. Tôi đã thử nó mà không đi qua Type 'T' và. Net figured out :) Cảm ơn rất nhiều –

Các vấn đề liên quan