2011-10-27 82 views
5

ninject是否可以通過綁定獲取具體類型?我不想實例化實現,只是獲取類型。從ninject獲取所有具體類型

我想要做的做這樣的事情

Type[] concreteTypes = Kernel.GetBindings(typeof(IController)). 
    GetImplementingTypes(); 

Kernel只是一個StandardKernel

我想最終反映這些類型。

回答

4

唯一的方法是獲取所有使用kernel.GetAll<IController>()的實例。 Ninject沒有設置綁定映射。當通過注入或獲取調用解決實例時,確定實現。這是因爲Ninject允許有條件和隱式的綁定。

如果你設置了一個MVC3應用程序,你並沒有實際註冊你的控制器,因爲Ninject會決定加載哪個控制器以及注入哪個控制器。它通過懶惰地創建一個隱式綁定來實現這一點。

最接近的是擴展StandardKernel並訪問受保護的綁定集並查找所有非條件綁定。一旦你有了所有的非條件綁定,你可能能夠拆開綁定,但我不記得它們可能隱藏在StandardProvider類的後面。

你在做什麼,你需要知道特定接口的確切綁定配置?

+0

我意識到這是永遠以前,但只是一個地方,我需要這個:我正在爲WCF構建基於Ninject的ServiceHost,讓Ninject爲我構建服務實例。我需要爲ServiceHost構造函數提供具體服務實現的類型,而不是服務接口。 –

相關問題