2013-08-12 3 views
4

Мы переходим из 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>(); 

Что я здесь делаю неправильно?

+0

Ничего себе .... не один? –

ответ

0

Любые методы, которые перехватываются должны быть виртуальными:

public virtual string GetData(int value) 
Смежные вопросы