WCF 与 Ninject 抛出 ArgumentNullException

标签 wcf ninject

我是 Ninject 的新手,正在尝试评估它与我更熟悉的温莎城堡相比如何。我的应用程序是托管在 IIS 中的 WCF 服务应用程序。因此,我尝试启动容器/内核并使用 NinjectServiceHostFactory 来创建我的服务类等。不幸的是,我收到了 ArgumentNullException。

以下是异常信息:

System.ArgumentNullException
Cannot be null. Parameter name: root

   at Ninject.ResolutionExtensions.GetResolutionIterator(IResolutionRoot root, Type service, Func`2 constraint, IEnumerable`1 parameters, Boolean isOptional, Boolean isUnique)
   at Ninject.Extensions.Wcf.NinjectInstanceProvider.GetInstance(InstanceContext instanceContext, Message message) in C:\Development\ninject.extensions.wcf\source\Ninject.Extensions.Wcf\NinjectInstanceProvider.cs:line 75
   at System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance(InstanceContext instanceContext, Message request)
   at System.ServiceModel.InstanceContext.GetServiceInstance(Message message)
   at System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

这是我正在使用的代码(仅限相关内容):

在 TheService.svc 中(无代码隐藏):

<%@ ServiceHost Language="C#"
                Debug="true"
                Service="MyServices.TheService"
                Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory"
                %>

在 Global.asax.cs 中:

public class Global : NinjectWcfApplication
{
    protected override IKernel CreateKernel()
    {
        var kernel = new StandardKernel(new ServiceModule());
        return kernel;
    }
}

在ServiceModule.cs中:

internal class ServiceModule : NinjectModule
{
    public override void Load()
    {
        Bind<ITheService>().To<TheService>();
        Bind<ITheRepository>().To<TheRepository>();
    }
}

所有这些代码似乎都工作正常。我放入一些诊断来跟踪方法调用,并调用 CreateKernel 方法,然后调用 ServiceModule 中的 Load 方法,该方法返回,然后 CreateKernel 返回。但是,当我尝试调用 TheService 中的任何服务方法时,出现上述异常。

我正在使用 wsHttpBinding 并且服务引用都解析得很好。接口(interface)和实现类是有效的。当从容器/内核检索实际服务实例时,问题似乎发生了。

我错过了什么?

最佳答案

我遇到了同样的问题,发现内核未在 NinjectServiceHostFactory 中的 KernelContainer.Kernel (对于版本 2.2 https://github.com/ninject/ninject.extensions.wcf/blob/2.2.0.0/src/Ninject.Extensions.Wcf/KernelContainer.cs )或(对于版本 2.3 https://github.com/ninject/ninject.extensions.wcf/blob/2.3.0.0/src/Ninject.Extensions.Wcf/NinjectServiceHostFactory.cs )中设置。 SetKernel(IKernel内核)。 不知道为什么这没有神奇地设置,但在 Global.asaxCreateKernel() 方法中设置它似乎可以修复它。

关于WCF 与 Ninject 抛出 ArgumentNullException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3703903/

相关文章:

c# - 绑定(bind) ToConstant 和调用 InSingletonScope 是多余的吗?

asp.net-mvc - Ninject + ASP.NET MVC + InRequestScope

c# - 可选注入(inject)当前用户的最佳实践

c# - 引用的 WCF 服务不使用 app.config

asp.net-mvc - 使用存储库模式时的多个数据库上下文

c# - Ninject 在 appharbor 上启动应用程序时崩溃

c# - CaSTLe Windsor WcfFacility 出现奇怪的组件注册错误

wcf - 为什么开发人员应该使用 Web 服务而不是直接连接到数据库?

c# - WCF 和 NetNamedPipeBinding - AVG 防病毒软件

c# - IIS Apppool 断开与 WCF 服务的连接