2012-05-10 28 views
7

Oto mój modułWCF używając Ninject utylizować nie wywołując w requestscope

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

Oto global.asax

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

Próbowałem też InScope (c => OperationContext.Current)

Oto moja usługa z IDisposable w 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(); 
    } 

Oto ServiceHostFactory w znacznikach usług

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

wstrzyknięciu Zależności prac. Moją jedyną obawą jest to, że metoda dispose nie jest uruchamiana, gdy Klient zamyka połączenie serwisowe.

Próbowałem usunąć Factory = "Ninject.Extensions.Wcf.NinjectDataServiceHostFactory" tylko po to, aby sprawdzić, czy Dipose zostanie wywołana i zadzwonił, ale oczywiście nie będę miał automatycznego wstrzyknięcia. Więc może być coś, co robię źle w konfiguracji? lub jest błąd na ninject nie nazywający Dispose?

Uwaga: Pobieram przykładową konfigurację w ninjectowym rozszerzeniu wcf i właśnie dodałem trochę DI.

Twoja pomoc zostanie doceniona.

BTW: Używam Ninject 3.0.0.15, Ninject.Extensions.Wcf 3.0.0.5, 3.0.0.7 Ninject.Web.Common

Odpowiedz

6

Korzystanie

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

Hi Remo, dziękuję. –

+0

Remo, czy mógłbyś wyjaśnić nieco, jak to rozwiązuje problem? Dzięki – Hari

+2

WCF żąda instancji WebService nie IWebService –

Powiązane problemy