在与Ninject绑定时使用泛型类型是可能的吗?

本文关键字:泛型类型 绑定 Ninject 定时 在与 | 更新日期: 2023-09-27 18:06:39

使用Ninject,在我的主程序中我调用:

var kernel = new StandardKernel(new MyBindings());
var stuff = kernel.Get<MediaPresenter>();

不幸的是,我得到了一个异常:

没有匹配的绑定可用,类型也不可用self-bindable .

我真的不明白那是什么意思。这是我的绑定类:
class MyBindings : NinjectModule
{
    public override void Load()
    {
        Bind<MediaPresenter>().ToSelf();
        Bind(typeof (Dao<Book>)).To(typeof (Dao<Book>));
    }
}

如果我删除行:

Bind(typeof(Dao<Book>)).To(typeof(Dao<Book>));

应用程序运行,但是没有绑定。

为什么这种事情不工作,我该如何解决它?

在与Ninject绑定时使用泛型类型是可能的吗?

现在无法测试,但应该可以运行:

Bind(typeof (Dao<>)).To(typeof(Dao<>));

使用接口,可能是一个更好的主意:

Bind(typeof (IDao<>)).To(typeof(Dao<>));

为什么不在load:

Bind<Dao<Book>>.ToSelf();

您应该针对接口进行编码,因为这将使您的代码更易于测试。看看这个关于Ninject绑定的更多信息

Ninject绑定

在您的情况下,您需要这样做(未测试)。只要你告诉Inject具体的实现,它就会在正确的地方为你处理注入,这取决于你在代码中有正确的注入属性。

  class MyBindings : NinjectModule
        {
            public override void Load()
            {
                Bind<IMediaPresenter>().To<MediaPresenter>;
                Bind<IDao>().To<Dao>();
                Bind<IBook>().To<Book>();
            }
        }