我正在尝试使用 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();