Перехват не работает с WCF и Ninject 3.0
У меня проблема с Ninject 3.0 и методом перехвата WCF.
Я использую TaskService
<%@ ServiceHost Language="C#" Debug="true" Service="Fasade.TaskService" Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory"%>
и моя конфигурация:
var settings = new NinjectSettings {LoadExtensions = false};
IKernel kernel = new StandardKernel(
new NinjectSettings {LoadExtensions = false},
new WcfModule(),
new DynamicProxyModule()
);
kernel.Bind<ITaskService>().To<TaskService>().InRequestScope().Intercept().With(new ServiceInterceptor());
ServiceInterceptor реализует IInterceptor,
Когда я использую UnitTest для ядра, ninject использует объект DynamicProxy для реализации ITaskService, но он не работает в WCF.
Я не знаю, почему NinjectServiceHostFactory не использует DynamicProxy и Interception для возврата реализации ITaskService.
1 ответ
Решение
Вместо
kernel.Bind<ITaskService>().To<TaskService>().
InRequestScope().Intercept().With(new ServiceInterceptor())
Вы должны изменить привязку к
Bind<TaskService>().ToSelf().
InRequestScope().Intercept().With<ServiceInterceptor>();
потому что в служебном файле.svc есть реализация
Service="Fasade.TaskService"