2010-08-22 61 views
2

如何查找類當前綁定到抽象類Ninject在下面的例子:查找內容類的抽象類綁定到Ninject

if(conditional) 
    Bind<IProducts>().To<Products>(); 
else 
    Bind<IProducts>().To<SqlProducts>(); 
Type currentType = 'Type based upon current binding of IProducts' 

我怎樣才能得到currentType的價值

回答

2

Kernel.Resolve是您尋找的解析機器的低級入口點 - 它不會像實例化對象那樣。

我建議下載主幹,包括測試,你會得到涵蓋你的確切場景的例子。不要把它當作一次性提交 - 這些測試是適當的xUnit.net測試,這些測試在短小,專注和覆蓋範圍方面都堪稱典範。

您也可以找到Kernel.Get<T>().GetType()/Kernel.TryGet<T>().GetType()Kernel.GetAll<T>要使用的,根據您的具體情況 - 如果你能在同一個擴展,我可以讓這個回答更具體的(但所有這些實例化對象,而不是讓你查詢綁定在一個較低的水平。

+1

謝謝您的回答,並補充提示。這確實是我需要的是樣品,因爲我還沒有發現有很多除了Mvc控制器以外的示例。 – Mike 2010-08-23 15:19:10

1
kernel.Get<IProducts>().GetType() 

給了我在運行時正確的類型。

+0

(Obv,只要您獲得足夠的點數s,像這樣的東西應該被記錄爲評論,但你知道這一點!)。請注意,您所做的調用會導致類的實例化(假設您未使用已創建實例的作用域,如[僅在幾個小時前的另一個答案]中所述)(http:/ /stackoverflow.com/questions/3543565/ninject-is-binding-stuff-behind-my-back/3546032#3546032))。這可能會或可能不會對您造成問題。 – 2010-08-23 12:57:37