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