caliburn.micro フレームワークを使用して WPF デスクトップ アプリケーションを開発しています。メソッド呼び出しをインターセプトできるように ninject インターセプターを構成したいと考えています。コードのあちこちに多くの try-catch ブロックがないように、集中化された場所で例外を処理するためにこれを行いたいと思います。
ninject ですべてを配線するたびに、システムが例外をスローするため、これを達成できませんでした。
だからここにいくつかのコードがあります:
AppBootstrapper の構成メソッドは次のようになります。
protected override void Configure()
{
_kernel = new StandardKernel(new NinjectServiceModule());
_kernel.Bind<IWindowManager>().To<WindowManager>().InSingletonScope();
_kernel.Bind<IEventAggregator>().To<EventAggregator>().InSingletonScope();
_kernel.Bind<ISomeViewModel>().To<SomeViewModel>().Intercept().With<SomeInterceptor>() //this is where the exception is thrown;
_kernel.Bind<IShell>().To<ShellViewModel>();
}
今私のインターセプターのインターセプトメソッド:
public void Intercept(IInvocation invocation)
{
if (invocation.Request.Method.Name == "TheMethodIWantIntercepted")
{
try
{
invocation.Proceed();
}
catch (Exception)
{
Console.WriteLine("I Handled exception");
}
}
else
{
invocation.Proceed();
}
}
ビュー モデルのメソッドは次のようになります。
public virtual void TheMethodIWantIntercepted()
{
//Some logic here
}
これが、インターセプターが機能するはずの方法です。しかし、プログラムを実行するたびに機能せず、ninject が SomeViewModel のインスタンスを ISomeViewModel に挿入しようとすると、プログラムの実行が失敗し、これがスローされる例外 (およびスタック トレース) です: http://pastebin .com/qerZAjVr
これで私を助けてくれることを願っています、事前に感謝します。