使用Ninject,在我的主程序中,我打电话:
var kernel = new StandardKernel(new MyBindings());
var stuff = kernel.Get<MediaPresenter>();
不幸的是我得到了一个例外:
没有匹配的绑定可用,类型不可用 自可绑定。
我真的不明白这意味着什么。这是我的约束类:
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>));
应用程序运行,但后来我没有绑定。
为什么这种事情不起作用,我该如何解决?
答案 0 :(得分:2)
现在无法测试,但这应该有效:
Bind(typeof (Dao<>)).To(typeof(Dao<>));
使用界面,可能更好的想法:
Bind(typeof (IDao<>)).To(typeof(Dao<>));
答案 1 :(得分:0)
为什么不在加载中执行此操作:
Bind<Dao<Book>>.ToSelf();
答案 2 :(得分:0)
你应该对接口进行编码,因为它会让你的代码更加可测试。看看有关Ninject绑定的更多信息
好的,你需要这样做(未经测试)。只要您告诉注入具体的实施,它将根据您在代码中具有正确的注入属性来处理在适当位置的注入。
class MyBindings : NinjectModule
{
public override void Load()
{
Bind<IMediaPresenter>().To<MediaPresenter>;
Bind<IDao>().To<Dao>();
Bind<IBook>().To<Book>();
}
}