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



我正在尝试使用 Ninject v3 来测试托管在 .NET4 视窗服务 ( 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<IServiceBehavior>()作为第一个参数。

您的示例可能如下所示:

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

最新更新