Расширение Ninject для перехвата с WCF дает мне «Ссылку на объект, не установленную для экземпляра объекта».ошибка - PullRequest
1 голос
/ 28 ноября 2010

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

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

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

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

end edit

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();
    }
}

Спасибозаранее, Ринзе

1 Ответ

1 голос
/ 01 декабря 2010

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

...