【问题标题】:ninject ioc with inherited base generic repositoryninject ioc 与继承的基本通用存储库
【发布时间】:2014-02-22 10:43:04
【问题描述】:

我有一个通用存储库,抽象和具体如下

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>();

这是我第一次尝试这样做但收到错误:

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

【问题讨论】:

    标签: ioc-container ninject.web.mvc


    【解决方案1】:

    您的SkyDiveCentreRepository 继承自GenericRepository&lt;DiveCentre&gt;,并且没有实现ISkyDiveCentreRepository 接口。

    只需显式地实现它:

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

    没有它......你不能做这样简单的事情:

    ISkyDiveCentreRepository repo = new SkyDiveCentreRepository();
    

    如果你做不到.. Ninject 也做不到。

    【讨论】:

    • 啊!!太好了,成功了,总能对事物有新的认识!
    猜你喜欢
    • 2014-02-15
    • 2011-05-21
    • 1970-01-01
    • 2019-11-21
    • 2012-08-16
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多