WPFを中心に書いています。Technologies。Xamarin前回XamarinでAOPするにはIL弄るライブラリを自作するしかないと言ったな?あれは嘘だ。Cauldron.Interception.Fodyを使えばできる。www.nuget.orgなんてこった...まぁ皆さんには朗報ですしょう。私は赤面の限りですが。いう訳で、今回はCauldron.Interception.Fodyを使ってXamarinでAOPをする方法(正確にはメソッド呼び出しをインターセプトする方法)を紹介したいと思います。下準備インターセプターを作成するインターセプターを織り込む実はちょっと仕様が気に入らないサンプル概要さて、今回作るのは非常に簡単なサンプルです。MainPageでメソッドを呼び出し、メソッドの呼び出しをDebug.WriteLineでログ出力するだけのものです。Analyticsでよく使われる機能の分析とかしないのかな?良く分かりません)なんかを統一的にアスペクトとして織り込む(Weaving)などに使えるでしょう。便利ですよ?下準備とりあえずつぎの手順で下準備をしてください。2.0.16XFodyAppプロジェクト(共通コードプロジェクト)にFodyWeavers.xmlファイルを作成するFodyWeavers.xmlにはつぎの内容を記載してください。</Weavers>これで下準備は完了です。インターセプターを作成するメソッドの呼び出しをインターセプトし、ログ出力するクラスを作成します。InterceptorAttributeクラスを作成し、次のように実装しましょう。}}メソッドの呼び出しをインターセプトする属性クラスです。いってもDebugにログを出力しているだけです。インターセプターを織り込むちょっと雑ですが、MainPage.xaml.csにメソッドを追加して、そこに先のインターセプターを織り込みましょう。MainPage.xaml.csを次のように実装してください。}}AddメソッドにInterceptorを宣言しています。これを実行すると、デバッグウィンドウに次のように表示されます。ちなみにインターセプターを織り込まれたメソッドは次のコードと等価なようにILを編集されているそうです。}}さぁこれで心置きなくXamarinでもAOPライフが送れ...るといいんですが...実はちょっと仕様が気に入らないインターセプターの仕様が実はちょっと気に入りません。インターセプターは次のようにOnEntry、OnExit、OnExceptionの三つのメソッドを実装します。}}実際、別にこれで実装できないことはないのですが、3つほど不満があります。Responsibility的に複数のインターセプターを連結して適用できる仕組みが欲しいインターセプトはCastle.CoreのDynamicProxyのような仕組みでインターセプトしたい例外をキャッチして後処理したら上には投げないみたいなこともできないちなみに、2.の具体例はつぎのような感じに実装したいのです。}}connectionを、織り込んださきにどう渡すのか?という解決の容易な課題はありますが、このようにインターセプターでトランザクション管理をして、ちゃんとusing句で記載したいなという思いがあります。前処理と後処理を別々のメソッドで呼び出されてもできないわけじゃないんですが、少なくとも単機能のインターセプターを組み合わせて、複数の非機能要件を実現するようなことはCauldron.Interception.Fodyではできません。3.にも記載したように例外を握りつぶすような実装もできません。Calender自分的本番までには間に合わせたいなあ。IL全然わからんのですよね...間に合うかなあ。いうわけで、今日はここまで。(1)はてなブログをはじめよう!nuitsjpさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。