Мы переходим из UNITY в Ninject в качестве нашего локатора сервисов по умолчанию для служб WCF. Для этого есть красивый пакет NuGet, который позволяет получать стандартное разрешение, и это легкий ветерок.Невозможно получить перехват Ninject для работы с WCF
Однако - я хочу перехватить вызовы к моей службе 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>();
}
Если установка I ядро вроде этого, экземпляр менеджера вводится, но перехват не происходит. Мой перехватчик, который регистрирует что-то перед исполнением и после выполнения, никогда не вызывается.
Другие темы StackOverflow предлагают использовать:
kernel.Bind<Service1>().ToSelf().Intercept().With<MyInterceptor>();
Если я сделаю это, менеджер не впрыскивают. Если я затем перейду и создаю конструктор, который принимает в менеджер, он работает, но опять же: нет перехвата.
kernel.Bind<Service1>().ToSelf().WithConstructorArgument("manager", kernel.Get<ISomeManager>()).Intercept().With<MyInterceptor>();
Что я здесь делаю неправильно?
Ничего себе .... не один? –