Sono nuovo di Ninject e sto cercando di valutare quanto sia paragonabile a Windsor Castle, con cui sono più familiare. La mia applicazione è un'applicazione di servizio WCF ospitata in IIS. Di conseguenza, sto cercando di avviare il contenitore/kernel e utilizzare NinjectServiceHostFactory per creare la mia classe di servizio, ecc. Sfortunatamente, sto ricevendo invece ArgumentNullException.WCF con lancio di Ninject ArgumentNullException
Ecco le informazioni eccezione:
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)
Ed ecco il codice che sto usando (abita in fondo a solo ciò che è rilevante):
In TheService.svc (senza code-behind):
<%@ ServiceHost Language="C#"
Debug="true"
Service="MyServices.TheService"
Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory"
%>
In Global.asax.cs:
public class Global : NinjectWcfApplication
{
protected override IKernel CreateKernel()
{
var kernel = new StandardKernel(new ServiceModule());
return kernel;
}
}
In ServiceModule.cs:
internal class ServiceModule : NinjectModule
{
public override void Load()
{
Bind<ITheService>().To<TheService>();
Bind<ITheRepository>().To<TheRepository>();
}
}
Tutto questo codice sembra funzionare bene. Metto un po 'di diagnostica per tracciare le chiamate al metodo e viene chiamato il metodo CreateKernel, seguito dalla chiamata al metodo Load in ServiceModule che restituisce quindi i ritorni di CreateKernel. Tuttavia, ottengo l'eccezione di cui sopra quando provo a chiamare uno dei metodi di servizio in TheService.
Sto usando wsHttpBinding ei riferimenti di servizio si risolvono tutti bene. Le interfacce e le classi di implementazione sono valide. Sembra che il problema si verifichi quando l'effettiva istanza di servizio viene recuperata dal contenitore/kernel.
Cosa mi manca?
Suggerirei di provare la mailing list - la roba di fabbrica della WCF non compare spesso qui. In alternativa, potrei provare a costruire dall'esempio una volta alla volta? (Non avere la fonte per andare ad esaminare le posizioni nel tuo stacktrace e vedere cosa potrebbe significare in base a questo). (Io uso le cose WCF, ma senza le cose di fabbrica) –
L'unica cosa diversa dall'esempio WcfTimeService è che l'implementazione del mio servizio non è nel code-behind del file .svc. Stavo pensando di scaricare la fonte e vedere se posso passare attraverso per trovare il problema. Speravo che non avrei dovuto affrontare il problema. Quale mailing list? – SonOfPirate
hai mai trovato una soluzione a questo? Ho lo stesso problema –