2010-01-20 69 views
14

我在解析器中有一個工廠方法。基本上,當我加載一個令牌時,我會查找該令牌的處理程序,或者直接到默認處理程序。我已經將它作爲switchDictionary<string,Type>實現,但兩種方法都要求我將映射存儲在處理程序類的其他位置。使用Ninject IOC替換工廠

我們正在使用Ninject爲國際奧委會,所以我已經意識到我也可以做它用

kernel.Get<ITokenHandler>(tokenName); 

但是,這並不救我存儲在什麼記號的處理器可以處理在2個位置的信息。有沒有一種方法可以修飾處理程序,使其自動映射?

回答

11

如果我正確地跟蹤你的問題,這聽起來像你想檢索一個命名綁定。你沒有提到你使用的Ninject的版本,但是根據你的代碼片段,我猜你正在使用Ninject 2.0。如果是這樣的話,那麼我認爲這將足以爲你的模塊中結合:

Bind<ITokenHandler>().To<YourConcreteTypeHere>().Named(tokenName); 

您綁定儘可能多的具體類型相同的接口和名稱區分它們,然後用你的確切語法進行檢索已經在你的問題中指定。

如果我錯過了某些關鍵,請告訴我。

+0

有點晚回到這裏。我真正想要的是一種標記ITokenHandler具體類的方法,以便我可以定義Handler被聲明的綁定。我現在已經用你的例子了所有綁定的綁定1的模式是: 綁定()。到>()。Named(tokenName); – baralong 2010-02-22 05:46:14

1

我用過的一種技術是Bind這樣的東西,你可以在需要某人選擇某些東西的地方需要處理一個參數(在上下文中)。

http://ninject.codeplex.com/wikipage?title=Providers%20and%20the%20Activation%20Contexthttp://ninject.codeplex.com/wikipage?title=Contextual%20Binding之間,您應該能夠通過可以說Only(When.Context...)的方式來綁定事物以使選擇工作?

+0

只是看到其他答案(就像這個+1)。另一個答案看起來像一個更明確和明確的方法,所以我肯定會更喜歡它 - 如果可能的話,我的方法是一個更通用的方法。 – 2010-02-19 10:10:51