代码之家  ›  专栏  ›  技术社区  ›  Omar

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

  •  4
  • Omar  · 技术社区  · 14 年前
    public class MyController : Controller
    {
       private MyClass _class;
    
       public MyController(MyClass class)
       {
           this._class = class;
       }
    }
    
    public class MyClass
    {
          // stuff
    }
    

    我的Ninject被连接起来注入实现 IController Controller 类是这样做的)。但是,我没有捆绑 MyClass Ninject 还在注射 进入之内 MyController

    我想我的问题是,为什么它会注入一些我没有绑定到任何东西上的东西?Ninject是否运行了一个查找带有签名的类 类名 ? 如果我的构造函数需要一个 MyBaseClass 我的程序集中有两个类继承 ?

    1 回复  |  直到 14 年前
        1
  •  8
  •   Community CDub    7 年前

    在Ninject V1中,ImplicitSelfBinding是一个顶级配置设置(默认为true IIRC)。

    在V2中,您观察到的隐式自绑定行为更加根深蒂固(尽管有一些方法可以关闭它——就像Ninject的大多数部分一样,它非常细粒度并且非常小)。在V2中,默认行为是,如果不存在其他绑定,则始终生成具体类型的自绑定。唯一一次 Bind<Concrete>().ToSelf() 是定制绑定,例如 .InSingletonScope() .

    看到这个了吗 answer by @Remo Gloor 在V2+中关闭它的方法。

    现在就在源代码中做一个grep,让它立即隐式绑定——它比人们瞎扯要容易得多!

    也别忘了看看 Ninject.Extensions.Conventions 和测试ninject.org网站安排隐含的 Bind() I*X* *X*

    (正如史蒂文所暗示的,如果你改变了你的 MyClass abstract .)