2010-11-28 4 views
1

Я начинаю с расширения перехвата Ninject и не могу заставить его работать в моей службе WCF. С расширением WCF ninject работает нормально, это перехват, который вызывает у меня проблемы. Может быть, я делаю это неправильно? Когда я пытаюсь добавить LinFuModel в конструктор ядра, он говорит мне, что он уже загружен, поэтому я думаю, это хорошо.Расширение перехвата Ninject с WCF дает мне ссылку на объект, не установленную на экземпляр объекта. error

В основном все перехватывание привязки прерывает мою службу wcf, но мой метод перехвата работает только на службе (getData() находится в контракте на обслуживание).

редактировать: следующие также не работает:

Kernel.Intercept((request) => request.Method.Name.StartsWith("Get")) 
      .With<TimingInterceptor>(); 

торцевую редактировать

protected override IKernel CreateKernel() 
    { 
     IKernel kernel = new StandardKernel(new ServiceModule()); 

     //var binding = kernel.Bind<MockBroker>().ToSelf(); 
     //binding.Intercept().With<TimingInterceptor>(); // THIS BREAKS 

     kernel.InterceptAfter<Watch>(m => m.GetData(0), i => { i.ReturnValue = "BLABLABLA"; log.Info("INTERCEPTED!"); }); //WORKS 

     //kernel.Bind<Watch>().ToSelf().Intercept().With(new TimingInterceptor()); //BREAKS 
     //kernel.Bind<FileSystemBroker>().ToSelf().Intercept().With<TimingInterceptor>(); //BREAKS 
     return kernel; 
    } 

public class TimingInterceptor : SimpleInterceptor 
{ 
    readonly Stopwatch _stopwatch = new Stopwatch(); 
    //private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
    protected override void BeforeInvoke(IInvocation invocation) 
    { 
     _stopwatch.Start(); 
    } 

    protected override void AfterInvoke(IInvocation invocation) 
    { 
     _stopwatch.Stop(); 
     string message = string.Format("[Execution of {0} took {1}.]", 
             invocation.Request.Method, 
             _stopwatch.Elapsed); 
     //log.Info(message); 
     _stopwatch.Reset(); 
    } 
} 

Thanx заранее, Rinze

+0

Я попробовал его с атрибутом на моем классе MockBroker, и это работает. Тем не менее, он не может заставить его работать над привязкой. Кроме того, похоже, что методы не только должны быть виртуальными, но и публичными? – Syg 2010-11-28 18:57:23

ответ

1

Линьфу поддерживает только виртуальный метод перехвата , Измените все перехваченные методы на виртуальные или переключитесь на DynamicProxy2.

+0

Я переключился на dynamicproxy2, и все работает немедленно. – Syg 2010-12-02 07:46:59