とあるクラスから一律例外を返さないようにしたいといったことに対して、いちいち各メソッドにtry/catchを入れるのではなく、対象クラスになるべく手を加えないでできないかということで、RealProxy使う方法で考えてみました。
そもそも例外を握りつぶすべきではないといった議論もあるかと思いますが、今回は、そういった話とは別に、単にできるのかなぁといった興味から書いています。
Visual Studio 2012 (.NET Framework 4.5)で書いています。
書いてみたコード
とりあえず、RealProxyを挟んで、メソッド呼び出しの結果から例外が発生しているか判断し、例外が発生していたならば、ReturnMessageを作りなおせばどうにかなるんじゃないかということで、実装してみました。
上記のように、属性でRealProxy指定できるようにしておき、対象のクラスに属性を指定+ContextBoundObjectを継承します。
問題点
とりあえず、例外は呼び元には返らなくなりますが、ハンドリングされない例外扱いとなり、try/catchで握りつぶした場合とは異なる結果となりました。
また、戻り値やout引数があった場合には、ReturnMessageを再作成する部分で、もう少し考慮が必要となってきます。(そのようなメソッドに対して例外を握りつぶしたいってことはないとは思いますが…)