2012-05-10 24 views
7

Aquí es mi móduloWCF utilizando Ninject Desechar no desencadenar en requestScope

internal class WebServiceConfiguration : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IWebService>().To<WebService>().InRequestScope(); 
    } 
} 

Aquí es el Global.asax

public class Global : NinjectHttpApplication 
{ 
    protected override IKernel CreateKernel() 
    { 
     return new StandardKernel(new WebServiceConfiguration()); 
    } 
} 

También probé InScope (c => OperationContext.Current)

Aquí está mi servicio con IDisposable en 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(); 
    } 

Aquí es el ServiceHostFactory en el marcado de servicios

<%@ ServiceHost Language="C#" Debug="true" Factory="Ninject.Extensions.Wcf.NinjectDataServiceHostFactory" Service="WCFTest.Services.WebService" CodeBehind="WebService.svc.cs" %> 

La inyección de dependencias obras. Mi única preocupación es que el método de eliminación no se active cuando el Cliente cierre la llamada de servicio.

Intenté eliminar la Factory = "Ninject.Extensions.Wcf.NinjectDataServiceHostFactory" solo para comprobar si se llamará a la Dipose, y se realizó la llamada, pero por supuesto no tendré la inyección automática. ¿Entonces podría haber algo que estoy haciendo mal en la configuración? o hay un error en ninject no llamando Dispose?

Nota: Cojo la configuración de muestra en la extensión wcf de ninject y simplemente agregué un poco de DI.

Su ayuda será apreciada.

Por cierto: estoy usando Ninject 3.0.0.15, Ninject.Extensions.Wcf 3.0.0.5, 3.0.0.7 Ninject.Web.Common

Respuesta

6

Uso

Bind<IWebService, WebService>().To<WebService>().InRequestScope(); 
+0

Hola Remo, gracias. –

+0

Remo, ¿podría explicarme un poco cómo esto resuelve el problema? Gracias – Hari

+2

WCF solicita una instancia de WebService no un IWebService –

Cuestiones relacionadas