你可能想要做的:
Bind<ISession>().ToMethod(() => new BurrowFramework().GetSession()).InRequestScope();
看一看在Ninject文檔 - ToProvider是指一個特定的接口,一個Ninject提供商任務,它可以徹底管理更復雜的工廠(而不是這些東西幾乎像上面的內聯工廠方法一樣工作)。
編輯:我將你的評論解釋爲暗示你嘗試了它,但發現我會搞砸了,假設有一個ToMethod的重載,委託沒有參數,委託語法中的細微差別讓你感到困惑。如果不是的話,我應該寫:
Bind<ISession>().ToMethod(ctx => new BurrowFramework().GetSession()).InRequestScope();
現在,C#語法的快速摘要:
在C#2,我們有匿名委託如下:
0) ToMethod(delegate {})...
1) ToMethod(delegate() {})...
2) ToMethod(delegate(x) {})...
3) ToMethod(delegate(X x) {})...
4) ToMethod(delegate(x, y) {})...
5) ToMethod(delegate(X x, Y y) {})...
在C# 3,我們可以如下創建lambda表達式:
1) ToMethod(() => {})...
2) Method(name => {})...
3) ToMethod((X x) => {})...
4) ToMethod((x, y) => {})...
5) ToMethod((X x, Y y) => {})...
任何類型的匹配哪個零,1,1 X型的,2的任何類型,一個X後跟Y分別爲
它們都是等效的 - 編譯器爲每個輸出生成相同的輸出。
區別在於在lambda語法中沒有等效的語法0。
強烈推薦喬恩斯基特的C#的深度爲使所有這些東西明確(但等到第二版這是幾個月的短號碼外)
(如果有時間做更深入的答案會看在Ninject源/ API,並看看他們是否在始終或從未通過上下文一致)
(如果它不是很明顯,編輯你的問題是一種更好的方式來做到這一點往返和/或評論,但你沒有代表表示(+ 1的問題 - 應該首先做到這一點),但我離題了......)。 (通過編輯回答....) – 2010-08-09 14:55:31
因此,根據我的編輯進行總結:第一段代碼匹配0或n個參數,第二個匹配恰好爲1,第三個與第二個匹配。第四,'(IContext arg)'可以省略,因爲使用委託語法而不是lambda。第五,lambda具有零參數,但沒有ToMethod的重載匹配。希望這是明確的。我知道我已經回答了另一個關於SO的問題,它有更好的討論和lambda和委託語法之間的區別的例子(我的答案指出,主張lambda語法的地方是你想匹配0或n代表的地方params並忽略他們) – 2010-08-09 15:12:57
謝謝魯本 我曾嘗試編輯我的問題/添加評論,但由於某種原因沒有辦法。 感謝您的澄清,我一定會檢查Jon Skeet的書。開始讓我的手進入C#。 我很感激你的幫助。 – Jokiliku 2010-08-09 17:17:15