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
Hi Remo, dziękuję. –
Remo, czy mógłbyś wyjaśnić nieco, jak to rozwiązuje problem? Dzięki – Hari
WCF żąda instancji WebService nie IWebService –