2014-02-22 69 views
0

我有一個通用的存儲庫中,抽象和具體如下面與繼承的基通用庫ninject IOC

public interface IGenericRepository<T> where T : class 

public class GenericRepository<T> : IGenericRepository<T> where T : class 

我然後具有從該繼承一個儲存庫,再次抽象和具體

public interface ISkyDiveCentreRepository : IGenericRepository<DiveCentre> 

public class SkyDiveCentreRepository : GenericRepository<DiveCentre> 

在我的ninject配置然後我有

kernel.Bind(typeof(IGenericRepository<>)).To(typeof(GenericRepository<>)); 
kernel.Bind<ISkyDiveCentreRepository>().To<SkyDiveCentreRepository>(); 

這是我第一次嘗試做從GenericRepository<DiveCentre>

Error 2 The type 'UKSkyDiveCentres.DAL.imp.SkyDiveCentreRepository' cannot be used as type parameter 'TImplementation' in the generic type or method 'Ninject.Syntax.IBindingToSyntax<T1>.To<TImplementation>()'. There is no implicit reference conversion from 'SkyDiveCentres.DAL.imp.SkyDiveCentreRepository' to 'SkyDiveCentres.DAL.ISkyDiveCentreRepository'. C:SOMEPATH\UKSkyDiveCentres\App_Start\NinjectWebCommon.cs 56 13 SkyDiveCentres 

回答

1

SkyDiveCentreRepository繼承和沒有實現ISkyDiveCentreRepository接口:這一點,但我得到的錯誤。

簡單明確地實現它:

public class SkyDiveCentreRepository : 
    GenericRepository<DiveCentre>, ISkyDiveCentreRepository 
           // ^^^^^^^^^^^^^^^^^^^^^^^^ this 

沒有它..你不能做簡單的事情是這樣的:

ISkyDiveCentreRepository repo = new SkyDiveCentreRepository(); 

如果你不能做到這一點.. Ninject不能無論是。

+0

argghh !!非常好,這是做的伎倆,總是很好,以獲得一些新的東西的眼睛! – Simon