Ninject - 注射单(Ninject - Injecting singleton)

2019-10-19 08:15发布

点击一个网站我创建一个链接时,我有这样的错误

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通过?

Answer 1:

EntityCache是​​没有公共建筑单身。

你如何指望你的DI框架能够实例化这个类? 如果你的类没有一个默认的公共构造函数或构造以它们在你的DI已注册的论点这不可能工作。

您可能需要提供自己的具体情况,如果类没有公共的构造函数:

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

例如:

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


文章来源: Ninject - Injecting singleton