2012-06-15 23 views
3

我一直在這裏抨擊我的頭大約8個小時,而我似乎無法找到關於如何更改ninject的自定義引導程序的簡單解釋(上次工作代碼返回到v2.xxx)到新的v3.0.0.0語法。將V2 Ninject綁定轉換爲V3

目前,我有以下幾點:

public class NinjectCustomBootStrapper : NinjectNancyBootstrapper 
{ 
    protected override Ninject.IKernel GetApplicationContainer() 
    { 
    return Program.MyContainer; 
    } 

} 
在隔類

,並:

public static IKernel MyContainer 
{ 
    get { return _myContainer ?? (_myContainer = CreateKernel()); } 
    set { _myContainer = value; } 
} 

private static IKernel CreateKernel() 
{ 
    var kernel = new StandardKernel(); 
    kernel.Bind<CardMonitorService>().ToSelf().InSingletonScope(); 
    return kernel; 
} 
在我的主程序 'Program.c'

在命令行應用程序。

Iv'e自更新ninject至V3.0.0.0後才發現存在一些突變。我承認我不經常使用ninject(我通常使用結構圖),而這個項目的唯一原因是我原本沒有寫它。

自從我升級Ninject,現在當應用程序啓動時,我得到以下異常:

Method not found: 'Ninject.Syntax.IBindingWhenInNamedWithOrOnSyntax`1<!0> 
Ninject.Syntax.IBindingToSyntax`1.ToConstant(!0)'. 

一噸的搜索和研究之後,我已經能夠找到最接近的是這樣的:

http://sharpfellows.com/post/Ninject-Auto-registration-is-changing-in-version-3.aspx

而它指向我的方向是正確的哪個,還不是因爲我不使用自定義綁定產生相當的解決方案。

所以我的問題是這樣的。

如何重寫上述內容,以便我的項目再次正常工作,並且在調用時調用WCF服務在請求進入時獲取正確的單例綁定。返回ninject 2不是一種選擇,因爲其他依賴項在已添加的項目中,已經強制v3升級,並且這些添加了已被請求的新功能,因此我正在爲此工作。

作爲參考,這是一個.NET4構建,在NancyFX上運行,自行託管WCF設置作爲使用Topshelf提供SCM接口的Windows服務。

乾杯

辣妹

補遺澄清一些事情有點

這是最初寫的某個時候回到現有的項目,我一直在問到一些新的功能添加到該項目。

作爲添加這些新功能的一部分,我需要將從早期版本使用的Ninject版本升級到V3.0.0.0,因爲添加到項目中的更新依賴項需要更新版本的Ninject。

在之前的Ninject V2中,我上面給出的代碼工作正常,沒有問題,因爲項目已經添加了Ninject V3,現在我得到了如上所述的異常。

我不能回到早期版本的Ninject,因爲這意味着無法添加我添加的新功能。

從迄今爲止我所做的研究中,上面的sharpfellows鏈接是我迄今在互聯網上發現的問題的最接近的解釋。

我不經常使用Ninject,所以我還沒有背景知道V2 & V3之間有哪些變化(基於我的研究)是我的問題的原因。

我需要知道如何更改我在V2(和上面顯示的)下編寫的代碼,以便它可以在V3下工作。

回答

1

所以,一個星期後,或使原來的問題是,南希開發團隊打破了ninject(反之亦然)的最新版本的二進制可比性:-)

有一個GitHub上拉請求解決這個問題,請訪問:

https://github.com/NancyFx/Nancy.Bootstrappers.Ninject/pull/6

但是下個版本「Nancy.Bootstrapper.Ninject」 0.12將出來的NuGet很快將有修復實施。

2

MissingMethodException通常是一個部署問題。您針對與您部署的不同的程序集進行編譯。檢查您是否部署了相同的版本和相同的版本。

+0

不知道我關注你雷莫。在構建時我收到了這個異常。也就是說,在我的項目中,我編譯,構建然後運行,應用程序立即中止給出的例外。只是爲了澄清這裏沒有部署,所有這些都是在部署發生之前發生的。 – shawty

+1

然後我誤解了你的問題。我從「當應用程序啓動時我得到以下異常」瞭解到它是運行時異常。 –

+0

對不起,我可以看到你從哪裏得到的。讓我稍微補充一點,並澄清一點。 – shawty