public class MyController : Controller
{
private MyClass _class;
public MyController(MyClass class)
{
this._class = class;
}
}
public class MyClass
{
// stuff
}
我的 Ninject 连接到实现
IController
的注入(inject)类。 (Controller
类这样做)。但是,我没有绑定(bind)MyClass
对任何东西,然而Ninject
仍在注入(inject)MyClass
进入 MyController
.我想我的问题是,为什么它会注入(inject)一些我没有绑定(bind)到任何东西的东西? Ninject 是否会找到带有签名
MyClass
的类? ?如果我的构造函数需要 MyBaseClass
,我认为这种行为会有所不同。我的程序集中有两个类继承自 MyBaseClass
?
最佳答案
在 Ninject V1 中,ImplicitSelfBinding 是一个顶级配置设置(默认为 true IIRC)。
在 V2 中,您观察到的隐式自绑定(bind)行为更加紧密地连接在一起(尽管有一些方法可以将其关闭——就像 Ninject 的大多数位一样,它非常精细且最小化)。在 V2 中,默认行为是,如果不存在其他绑定(bind),则始终生成具体类型的自绑定(bind)。您通常执行 Bind<Concrete>().ToSelf()
的唯一时间是自定义绑定(bind),例如执行 .InSingletonScope()
。
请参阅此 answer by @Remo Gloor 以了解在 V2+ 中将其关闭的方法。
立即在源代码中为 ImplicitSelfBinding 做一个 grep - 虽然它比人们喜欢阅读要容易得多!
也不要忘记在 ninject.org 上查看 Ninject.Extensions.Conventions
和测试,以将 Bind()
的隐式 I*X*
设置为 *X*
(正如 Steven 所暗示的,如果您将 MyClass
类更改为 abstract
,Ninject 将不会自我绑定(bind)。)
关于dependency-injection - Ninject 会自动注入(inject)非绑定(bind)类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3846839/