Не удается заставить 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)
Другие вопросы по тегам