2016-05-02 85 views
1

我創建了一個通用接口和一個通用的回購。我試圖利用這些泛型與我現有的體系結構來改進和簡化我的依賴注入實現。如何使用泛型與Ninject綁定接口類?

綁定在沒有泛型實現的情況下工作。 我似乎無法找到我要出錯的地方。

下面是我如何試圖與Ninject實現這些泛型。我接收

有錯誤是:

///錯誤消息: 無法轉換類型的對象 'DataRepository' 爲類型 'IDataRepository'。

這裏是通用回購和接口

//generic interface 
    public interface IGenericRepository<T> where T : class 
    { 
     IQueryable<T> GetAll(); 
     IQueryable<T> FindBy(Expression<Func<T, bool>> predicate); 
     void Add(T entity); 
     void Delete(T entity); 
     void Edit(T entity); 
     void Save(); 
    } 


//generic repo 
    public abstract class GenericRepository<T> : IGenericRepository<T> where T : class 
    { 
      ////removed the implementation to shorten post... 

在這裏,我創建了回購和接口,使用泛型

//repo 
    public class DataRepository : GenericRepository<IDataRepository> 
    { 
     public IQueryable<MainSearchResult> SearchMain(){ //.... stuff here} 
    } 

    //interface 
    public interface IDataRepository : IGenericRepository<MainSearchResult> 
    { 
     IQueryable<MainSearchResult> SearchMain(){ //.... stuff here} 
    } 

在靜態類NinjectWebCommon ../App_Start下我綁定了RegisterServices(IKernel內核)方法中的類。 我試過幾種綁定方式,但我仍然收到「Unable to cast object type ...」錯誤。

private static void RegisterServices(IKernel kernel) 
      { 
       // current failed attempts 
kernel.Bind(typeof(IGenericRepository<>)).To(typeof(GenericRepository<>)); 
       kernel.Bind(typeof(IDataRepository)).To(typeof(DataRepository)); 

       // failed attempts 
       //kernel.Bind<IDataRepository>().To<GenericRepository<DataRepository>>(); 
       //kernel.Bind<IDataRepository>().To<GenericRepository<DataRepository>>(); 
      } 

有誰看到任何我做錯了會導致這個問題?

+0

是否'DataRepository'從'IDataRepository'繼承?看起來它不是 – MaKCbIMKo

+2

可能你想要的是'class DataRepository:GenericRepository ,IDataRepository' –

+0

這是正確的。你應該提交它作爲答案 – ironman

回答

2

問題是DataRepository不是從IDataRepository繼承。

像這樣的東西應該是罰款:

public class DataRepository : GenericRepository<MainSearchResult>, IDataRepository 
{ 
    ...