2012-06-23 69 views
1

我正在嘗試使用Ninject v3測試.NET4 Windows服務(System.ServiceProcess.ServiceBase)中託管的Web服務。使用.NET 4將Ninject v2升級到v3 System.ServiceProcess.ServiceBase

我創建MyServerModule : NinjectModule,並在Load()我有條件地將我的接口綁定到基於app.config設置的運行時對象。

ServiceBase.OnStart()中,init步驟爲:首先,基於MyServerModule的實例創建一個新的StandardKernel,並將其與Ninject容器關聯。接下來,根據我的服務類創建一個NinjectServiceHost實例,然後打開服務主機以開始監聽。

在Ninject V2,代碼:

IKernel kernel = new StandardKernel(new MyServerModule()); 
KernelContainer.Kernel = kernel; 
NinjectServiceHost serviceHost = new NinjectServiceHost(typeof(MyService)); 
serviceHost.Open(); 

然而,在Ninject V3,KernelContainer不再存在。此外,NinjectServiceHost()現在接受服務器工廠,其子類爲IServiceBehavior

如何在Ninject v3中執行類似的初始化步驟?

回答

0

我遇到了一個類似的問題,在Windows服務中運行多個自託管的WCF服務。在初始化每個NinjectServiceHost時,我最終使用kernel.Get<IServiceBehavior>()作爲第一個參數。

你的例子可能是這樣的:

IKernel kernel = new StandardKernel(new MyServerModule()); 
NinjectServiceHost serviceHost = new NinjectServiceHost(kernel.Get<IServiceBehavior>(), typeof(MyService)); 
serviceHost.Open();