我是Ninject的新手,並試圖評估它與溫莎城堡的比較,我比較熟悉溫莎城堡。我的應用程序是在IIS中託管的WCF服務應用程序。因此,我試圖調整容器/內核並使用NinjectServiceHostFactory創建我的服務類,等等。不幸的是,我得到的是一個ArgumentNullException。WCF與Ninject投擲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和服務引用都解決得很好。接口和實現類是有效的。當從容器/內核檢索實際的服務實例時,看起來問題正在發生。
我錯過了什麼?
我建議嘗試郵件列表 - WCF工廠的東西不經常出現在這裏。或者,我可以嘗試從一點一點的樣本中修建? (不要讓源代碼去查看堆棧跟蹤中的位置,並根據它查看它的含義)。 (我使用WCF的東西,但沒有工廠的東西) – 2010-09-14 17:51:36
唯一不同於WcfTimeService示例的是我的服務實現不在.svc文件的代碼隱藏中。我一直在考慮下載源代碼,看看我是否可以一步步找到問題。我希望我不必經歷麻煩。什麼郵件列表? – SonOfPirate 2010-09-14 20:31:35
你有沒有找到解決辦法呢?我有同樣的問題 – 2011-08-03 04:18:00