Ninject会自动注入非绑定类吗?

Oma*_*mar 5 dependency-injection ninject

public class MyController : Controller
{
   private MyClass _class;

   public MyController(MyClass class)
   {
       this._class = class;
   }
}

public class MyClass
{
      // stuff
}
Run Code Online (Sandbox Code Playgroud)

我的Ninject被连接到注入实现的类IController(Controller类这样做).但是,我没有绑定MyClass到任何东西,但Ninject仍然是注射MyClassMyController.

我想我的问题是,为什么它会注入一些我没有绑定到任何东西的东西?Ninject是否会找到带有签名的班级MyClass?我假设如果我的构造函数需要一个MyBaseClass并且我的程序集中有两个继承自的类,这种行为会有所不同MyBaseClass吗?

Rub*_*ink 8

在Ninject V1中,ImplicitSelfBinding是一个顶级配置设置(默认为真正的IIRC).

在V2中,您观察到的隐式自绑定行为更加深入(虽然有一些方法可以将其关闭 - 就像Ninject的大多数位一样,它非常精细且极小).在V2中,默认行为是,如果不存在其他绑定,则始终生成具体类型的自绑定.你通常做的唯一一次Bind<Concrete>().ToSelf()是定制绑定,例如,做一个.InSingletonScope().

请参阅@Remo Gloor的回答,了解如何在V2 +中将其关闭.

现在就在ImplicitSelfBinding中为源代码做一个grep - 虽然它比人们的兔子更容易阅读!

也不要忘记Ninject.Extensions.Conventions在ninject.org上查看并测试安排隐式Bind()I*X*to*X*

(正如史蒂文提到的那样,如果你改变你的MyClass班级,Ninject不会自我约束abstract.)