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

时间:2012-06-23 01:39:05

标签: .net .net-4.0 ninject ninject.web.mvc ninject-3

我正在尝试使用Ninject v3来测试.NET4 Windows服务(System.ServiceProcess.ServiceBase)中托管的Web服务。

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

ServiceBase.OnStart()中,init步骤是:首先,基于StandardKernel的实例创建一个新的MyServerModule,并将其与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中执行类似的初始化步骤?

1 个答案:

答案 0 :(得分:0)

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

您的示例可能如下所示:

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