2016-12-30 73 views
0

我創建一個ASP分層的Web應用程序,我有以下結構:C#接口繼承 - 不能識別的基礎接口的方法

IService<T>

public interface IService<T> { 

    IEnumerable<T> GetAll(); 
    void Add(T entity); 
    void Delete(T entity); 

Service<T>

public class Service<T> where T : class { 

     private IRepository<T> _repository; 

     public Service(IRepository<T> repo) { 
      this._repository = repo; 
     } 

     public IEnumerable<T> GetAll() { 
      return _repository.GetAll(); 
     } 

etc 

然後我也有一些「定製服務」:

ICategoryService

public interface ICategoryService : IService<Category> { 

     IEnumerable<Category> GetProductCategories(int productId); 

    } 

CategoryService

public class CategoryService : Service<Category>, ICategoryService { 

     private IRepository<Category> _repository; 

     public CategoryService(IRepository<Category> repo) : base(repo) { 
      this._repository = repo; 
     } 

     public IEnumerable<Category> GetProductCategories(int productId) { 
      // implementation 
     } 

控制器:

public class ProductController : Controller { 
     private ICategoryService _cservice; 

     public ProductController(ICategoryService cservice) { 
      this._cservice = cservice; 
     } 
     ´ 
     // other methods 

     public ActionResult Categories() { 
       IEnumerable<Category> categories = _cservice.GetAll(); // doesn't work 
     } 

我試圖訪問.GetAll()方法在我的控制器,這是在IService定義並且在實施服務,但我得到一個'ICategoryService不包含GetAll的定義'錯誤,我不知道爲什麼。

我可以從我CategoryService訪問.GetAll()方法,所以我不知道爲什麼我不能(通過依賴注入)從CategoryService實例訪問它。

+0

你能充分展示你的控制器代碼(道具和構造函數)?這段代碼看起來不錯。 –

+0

所有我能想到的是你有ICategoryService或IService定義了兩次,它需要在錯誤接口 –

+0

更新與控制器的代碼 – Acla

回答

4

發佈您的代碼時,但是,似乎Service<T>沒有實現IService<T>改變類的實現來你可能已經做了一個錯字:

public class Service<T> : IService<T> 
    where T : class 
{ 

    private IRepository<T> _repository; 

    public Service(IRepository<T> repo) { 
     this._repository = repo; 
    } 

    public IEnumerable<T> GetAll() { 
     return _repository.GetAll(); 
    } 

我也從類移動where T : class約束接口。

+0

沒關係,這工作! :) 謝謝! *踢自己不知道這樣一個愚蠢的錯誤* – Acla