Je suis nouveau à Ninject et j'essaie d'évaluer à quel point il se compare au château de Windsor, que je connais plus. Mon application est une application de service WCF hébergée dans IIS. Par conséquent, j'essaie de lancer le container/kernel et d'utiliser NinjectServiceHostFactory pour créer ma classe de service, etc. Malheureusement, je reçois une ArgumentNullException à la place.WCF avec lancer Ninject ArgumentNullException
est ici les informations d'exception:
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)
Et voici le code que je utilise (épurée seulement ce qui est pertinent):
En TheService.svc (pas de code-behind):
<%@ ServiceHost Language="C#"
Debug="true"
Service="MyServices.TheService"
Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory"
%>
En Global.asax.cs:
public class Global : NinjectWcfApplication
{
protected override IKernel CreateKernel()
{
var kernel = new StandardKernel(new ServiceModule());
return kernel;
}
}
En ServiceModule.cs:
internal class ServiceModule : NinjectModule
{
public override void Load()
{
Bind<ITheService>().To<TheService>();
Bind<ITheRepository>().To<TheRepository>();
}
}
Tout ce code semble fonctionner correctement. Je mets quelques diagnostics pour tracer les appels de méthode et la méthode CreateKernel est appelée, suivie par l'appel à la méthode Load dans ServiceModule qui renvoie ensuite CreateKernel renvoie. Cependant, je reçois l'exception ci-dessus lorsque j'essaie d'appeler l'une des méthodes de service dans TheService. J'utilise wsHttpBinding et les références de service résolvent très bien. Les interfaces et les classes d'implémentation sont valides. Il semble que le problème se produise lorsque l'instance de service réelle est récupérée à partir du conteneur/noyau.
Qu'est-ce qui me manque?
Je suggère d'essayer la liste de diffusion - les choses d'usine de WCF ne viennent pas souvent ici. Alternativement, je voudrais que vous pourriez essayer de construire à partir de l'échantillon à la place? (N'ayez pas la source à portée de main pour aller examiner les emplacements dans votre stacktrace et voir ce que cela pourrait signifier en fonction de cela). (J'utilise le truc WCF, mais sans les trucs d'usine) –
La seule chose différente de l'exemple WcfTimeService est que mon implémentation de service n'est pas dans le code derrière le fichier .svc. J'ai envisagé de télécharger la source et de voir si je peux passer à travers pour trouver le problème. J'espérais que je n'aurais pas à traverser le problème. Quelle liste de diffusion? – SonOfPirate
avez-vous déjà trouvé une solution à cela? J'ai le même problème –