1

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

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

ServiceBase.OnStart()中,初始化步骤是:首先,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 中执行类似的初始化步骤?

4

1 回答 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();
于 2012-08-15T16:54:26.707 回答