2012-05-30 51 views
18

我使用附加的圖像來解釋我的意思。NInject:如何在獲取<T>()時傳遞參數?

  • 我有一些由NInject管理的類。他們中的一些人有一些單身人士的實例,而其他人則處於短暫的範圍內。在圖像中,藍色矩形是單色,紅色是瞬態的。處理器取決於其他類或實例。

  • 我想每次都使用kernel.Get獲取Processor的實例。但是,每次我想爲Processor使用的對象使用不同的值時。請參閱圖像中的Action1和Action2。代碼不是真實的,只是爲了解釋這裏。

有沒有什麼現有的方法可以滿足我的需求? Pass parameters when Get

回答

29

您應該能夠傳遞構造函數參數,因爲您的Processor將這些依賴項作爲構造函數中的參數。

var foo = new Ninject.Parameters.ConstructorArgument("foo", new Foo()); 
var bar = new Ninject.Parameters.ConstructorArgument("bar", new Bar()); 
var processor = kernel.Get<IProcessor>(foo, bar); 

public Processor (Foo foo, Bar bar){ 
    this.foo = foo; 
    this.bar = bar; 
} 
+1

謝謝您的回覆。不過,我相信你誤解了我的問題。它不是關於在綁定階段中更改綁定,而是關於在解析階段中傳遞參數。我的意思是當我嘗試獲取IProcessor的實例時,如何將值傳遞給處理器的依賴關係:Foo和Bar的實例。這兩個動作中的對象圖是相同的,但每個實例的屬性將具有不同的值。 – Zach

+1

@Zach對不起,我誤解了你的問題。我編輯了我的初始答案。 –

1

使用OnActivation()函數可以在依賴項被激活時掛鉤事件。