2010-11-28 12 views
1

私はNinjectインターセプトエクステンションを使い始めており、WCFサービスで動作させることができません。 WCFの拡張機能では、ninjectはうまく動作します。それは私に問題を起こす傍受です。多分私はそれを間違っている?私がLinFuModelをカーネルコンストラクタに追加しようとすると、すでに読み込まれていることがわかります。それでいいと思います。WCFを使用したNinjectインターセプト拡張により、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」と表示されます。エラー

バインディングのすべての代行受信は、私の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(); 
    } 
} 

ありがとう、 Rinze

+0

MockBrokerクラスの属性で試してみました。それでもバインディングで動作させることはできません。また、方法だけでなく、一般公開する必要がありますか? – Syg

答えて

1

LinFuのみ仮想メソッドの傍受をサポートしています。インターセプトされたすべてのメソッドを仮想に変更するか、DynamicProxy2に切り替えます。

+0

私はdynamicproxy2に切り替えました。すべてが即座に動作します。 – Syg

+1

しかし、DynamicProxy2は仮想メソッドの傍受だけをサポートしています。傍受しようとするメソッドが仮想ではない場合、DynamicProxy2は壊れません。 – Syg

関連する問題