2009-02-26 52 views
2

我想爲NInject(v1.0)創建一個OnePerSessionBehavior,而且我最主要的工作。剩下的唯一問題是如何在每個新會話要求容器中的東西時使用.WithArguments()傳遞新參數。現在,我將容器的引用保留爲應用程序變量,因此該模塊只能被加載一次,所以綁定只發生一次。在NInject中實現OnePerSessionBehavior

例如,以下內容爲每個新會話返回'Something'的單個實例,但傳遞到所有會話的構造函數參數是相同的DateTime。

Bind<ISomething>() 
    .To<Something>() 
    .Using<OnePerSessionBehavior>() 
    .WithArgument("currentDateTime", DateTime.Now); 
+0

我假設你需要的東西不僅僅是DateTime.Now。你能否多說一點你的要求? :) – 2009-11-02 14:30:44

回答

0

您傳遞的是在綁定定義期間評估的值。這就是爲什麼你一次又一次得到同樣的價值。 實際上,從我的頭頂來看,我沒有一個簡單的答案,但我一定會考慮它,因爲它可能對我來說是有用的測試目的。

1

你能通過lamda作爲你的論點嗎?舉例來說,如果你有一個這樣的類:

Bind<ISomething>() 
    .To<Something>() 
    .Using<OnePerSessionBehavior>() 
    .WithArgument("initializer",() => { return DateTime.Now; }); 

雖然我不知道你確切的情況,另一種想法是創建對象:

public class Something : ISomething 
{ 
    public Something(Action<DateTime> initializer) 
    { 
     var now = initializer(); 
    } 
} 

可以按如下方式將其綁定不用擔心參數注入,並然後設置你的屬性:

kernel.Bind<ISomething>().To<Something>().Using<OnePerSessionBehavior>();  
var mySomething = kernel.Get<Something>(); 
mySomething.DateCreated = DateTime.Now; 

或:

mySomething.Initialize(DateTime.Now); 

這些想法是否有效?