public class MyController : Controller
{
private MyClass _class;
public MyController(MyClass class)
{
this._class = class;
}
}
public class MyClass
{
// stuff
}
我的Ninject被连接到注入实现IController
的类(Controller
类这样做)。但是,我没有将MyClass
绑定到任何内容,但Ninject
仍在MyClass
注入MyController
。
我想我的问题是,为什么它会注入一些我没有绑定到任何东西的东西? Ninject是否会找到带有签名MyClass
的班级?我假设如果我的构造函数需要MyBaseClass
并且我的程序集中有两个继承自MyBaseClass
的类,则此行为会有所不同吗?
答案 0 :(得分:8)
在Ninject V1中,ImplicitSelfBinding是一个顶级配置设置(默认为真正的IIRC)。
在V2中,您观察到的隐式自绑定行为更加深入(虽然有一些方法可以将其关闭 - 就像Ninject的大多数位一样,它非常精细且极小)。在V2中,默认行为是,如果不存在其他绑定,则始终生成具体类型的自绑定。您通常只执行Bind<Concrete>().ToSelf()
的操作是自定义绑定,例如,执行.InSingletonScope()
。
有关在V2 +中关闭它的方法,请参见此answer by @Remo Gloor。
立即在源代码中为ImplicitSelfBinding做一个grep - 虽然它比人们喋喋不休更容易阅读!
另外不要忘记查看Ninject.Extensions.Conventions
并在ninject.org上进行测试,以便将Bind()
隐式I*X*
安排到*X*
(正如史蒂文提到的,如果你将MyClass
课程改为abstract
,Ninject将不会自我约束。)