我正在尝试使用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中执行类似的初始化步骤?
答案 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();