Ninject - 注射单身人士

时间:2014-02-09 22:20:31

标签: ninject asp.net-mvc-5

点击我正在创建的网站上的链接时出现此错误

Error activating IEntityCache using binding from IEntityCache to EntityCache
No constructor was available to create an instance of the implementation type.

Activation path:
 4) Injection of dependency IEntityCache into parameter entityCache of constructor of type AlbumRepository
 3) Injection of dependency IAlbumRepository into parameter albumRepository of constructor of type AlbumService
 2) Injection of dependency IAlbumService into parameter albumService of constructor of type AlbumController
 1) Request for AlbumController

Suggestions:
 1) Ensure that the implementation type has a public constructor.
 2) If you have implemented the Singleton pattern, use a binding with InSingletonScope() instead.

EntityCache是​​一个没有公共构造的单例。所以这就是我完成Ninject绑定的方式

kernel.Bind<IAlbumService>().To<AlbumService>();
            kernel.Bind<IAlbumRepository>().To<AlbumRepository>();
            kernel.Bind<IDbSetWrapper<Album>>().To<DbSetWrapper<Album>>();
            kernel.Bind<IEntityCache>().To<EntityCache>().InSingletonScope();

我做错了什么?

编辑

这是我的存储库:

public AlbumRepository(DatabaseContext context, IDbSetWrapper<Album> dbSetWrapper, IEntityCache entityCache)
            : base(context, dbSetWrapper, entityCache)

如何传入IEntityCache?

1 个答案:

答案 0 :(得分:3)

  

EntityCache是​​一个没有公共构造的单例。

您如何期望您的DI框架能够实例化这个类?如果您的类没有默认的公共构造函数或接受已在DI中注册的参数的构造函数,则这可能无法工作。

如果类没有公共构造函数,您可能需要自己提供特定的实例:

kernel
    .Bind<IEntityCache>()
    .ToMethod(context => ...return your specific instance here...)
    .InSingletonScope();

例如:

kernel
    .Bind<IEntityCache>()
    .ToMethod(context => EntityCache.Instance)
    .InSingletonScope();