2010-10-02 45 views
4
public class MyController : Controller 
{ 
    private MyClass _class; 

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

public class MyClass 
{ 
     // stuff 
} 

我的Ninject掛鉤注入類實現IControllerController類是這樣做的)。但是,我沒有將MyClass與任何東西綁定,但Ninject仍將MyClass注入MyControllerNinject是否自動注入非綁定類?

我想我的問題是,爲什麼它注入了一些我沒有綁定到任何東西? Ninject是否會發現簽名爲MyClass的班級?如果我的構造函數需要MyBaseClass,並且我的程序集中有兩個繼承自MyBaseClass的類,那麼我認爲這種行爲會有所不同?

+0

相關:http://stackoverflow.com/questions/14565380/disable-implicit-binding-injection-of-non-explicitly-bound-classes-in-ninject-2 – 2013-05-16 07:10:32

回答

7

在Ninject V1中,ImplicitSelfBinding是一個頂級配置設置(默認爲真正的IIRC)。

在V2中,您觀察到的隱式自綁定行爲更加深入地連接到了(雖然有些方法可以將其關閉 - 就像Ninject的大部分位置一樣,它非常精細且最小)。在V2中,缺省行爲是如果沒有其他綁定存在,則始終生成具體類型的自綁定。您通常只需要執行Bind<Concrete>().ToSelf()即可自定義綁定,例如執行.InSingletonScope()

請參見此answer by @Remo Gloor,以便在V2 +中將其關閉。

在ImplicitSelfBinding中立即執行一個grep的源代碼 - 它比閱讀的人更容易閱讀!

而且不要忘記看看Ninject.Extensions.Conventions和ninject.org測試安排隱含Bind() ING的I*X**X*

(如史蒂芬提到,Ninject不會自我約束,如果你改變了你的MyClass類是abstract。)