首页 文章

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

提问于
浏览
1

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

我创建了 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中执行类似的初始化步骤?

1 回答

  • 0

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

    您的示例可能如下所示:

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

相关问题