Не удается заставить Ninject Interception работать с WCF
Мы переключаемся с UNITY на Ninject в качестве локатора служб по умолчанию для служб WCF. Для этого есть красивый пакет NuGet, и запуск стандартного разрешения - это очень просто.
Однако - я хочу перехватить звонки на мой сервис WCF. Вот что у меня есть:
Мой файл SVC:
<%@ ServiceHost Language="C#" Debug="true" Service="NinjectWcfApp.Service1" Factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory" %>
Вот мой сервис:
public class Service1 : IService1
{
[Inject]
public ISomeManager Manager { get; set; }
public string GetData(int value)
{
if(this.Manager != null)
this.Manager.DoStuff();
return string.Format("You entered: {0}", value);
}
}
Ядро построено так:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ISomeManager>().To<SomeManager>();
kernel.Bind<IService1>().To<Service1>().Intercept().With<MyInterceptor>();
}
Если я настраиваю ядро таким образом, экземпляр менеджера внедряется, но перехват не происходит. Мой перехватчик, который записывает что-то перед выполнением и после выполнения, никогда не вызывается.
Другие темы Stackru предлагают использовать:
kernel.Bind<Service1>().ToSelf().Intercept().With<MyInterceptor>();
Если я это сделаю, менеджер не вводится. Если я тогда продолжу и создаю конструктор, который принимает менеджера, он работает, но опять же: никакого перехвата.
kernel.Bind<Service1>().ToSelf().WithConstructorArgument("manager", kernel.Get<ISomeManager>()).Intercept().With<MyInterceptor>();
Что я здесь не так делаю?
1 ответ
Все перехваченные методы должны быть виртуальными:
public virtual string GetData(int value)