Ecco il mio moduloWCF utilizzando Ninject Smaltire non innescare in requestscope
internal class WebServiceConfiguration : NinjectModule
{
public override void Load()
{
Bind<IWebService>().To<WebService>().InRequestScope();
}
}
Ecco la global.asax
public class Global : NinjectHttpApplication
{
protected override IKernel CreateKernel()
{
return new StandardKernel(new WebServiceConfiguration());
}
}
Ho anche provato InScope (c => OperationContext.Current)
Ecco il mio servizio con IDisposable in IWebService
[ServiceBehavior(InstanceContextMode = InstanceContextModeDefinition.Mode)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class WebService : IWebService
{
private readonly ISomeService _someService;
public WebService(ISomeService someService)
{
_someService = someService;
}
public void Dispose()
{
_someService.Dispose();
}
Ecco il ServiceHostFactory nel markup servizio
<%@ ServiceHost Language="C#" Debug="true" Factory="Ninject.Extensions.Wcf.NinjectDataServiceHostFactory" Service="WCFTest.Services.WebService" CodeBehind="WebService.svc.cs" %>
L'iniezione delle dipendenze opere. La mia unica preoccupazione è che il metodo di eliminazione non venga attivato quando il client chiude la chiamata di servizio.
Ho provato a rimuovere Factory = "Ninject.Extensions.Wcf.NinjectDataServiceHostFactory" solo per verificare se il Dipose verrà chiamato e ha chiamato ma ovviamente non avrò l'autoiniezione. Quindi potrebbe esserci qualcosa che sto facendo male nel setup? o c'è un bug su ninject che non chiama Dispose?
Nota: accetto l'installazione di esempio nell'estensione wcf di ninject e appena aggiunto alcuni DI.
Il vostro aiuto sarà apprezzato.
BTW: sto usando Ninject 3.0.0.15, Ninject.Extensions.Wcf 3.0.0.5, 3.0.0.7 Ninject.Web.Common
Ciao Remo, grazie. –
Remo, potresti spiegarlo un po 'come questo risolve il problema? Grazie – Hari
WCF richiede un'istanza WebService non un IWebService –