使用.NET 4 System.ServiceProcess.ServiceBase将Ninject v2升级到v3

使用.NET 4 System.ServiceProcess.ServiceBase将Ninject v2升级到v3,.net,.net-4.0,ninject,ninject.web.mvc,ninject-3,.net,.net 4.0,Ninject,Ninject.web.mvc,Ninject 3,我正在尝试使用Ninject v3测试托管在.NET4 windows服务中的web服务(System.ServiceProcess.ServiceBase) 我创建MyServerModule:NinjectModule,并在Load()中根据app.config设置有条件地将我的接口绑定到运行时对象 在ServiceBase.OnStart()中,初始化步骤是:首先,基于MyServerModule的实例创建一个新的StandardKernel,并将其与Ninject容器相关联。接下来,基于

我正在尝试使用Ninject v3测试托管在.NET4 windows服务中的web服务(
System.ServiceProcess.ServiceBase

我创建
MyServerModule:NinjectModule
,并在
Load()
中根据
app.config
设置有条件地将我的接口绑定到运行时对象

ServiceBase.OnStart()
中,初始化步骤是:首先,基于
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中执行类似的初始化步骤

在Windows服务中运行几个自托管WCF服务时,我遇到了类似的问题。在初始化每个NinjectServiceHost时,我使用
kernel.Get()
作为第一个参数

您的示例可能如下所示:

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