フラグA,Bからピクセルデータを復元。1ライン分をビットマップに書き出す。name="path">MAG画像ファイル名。<returns>ビットマップ。.NETMefContribにはジェネリック用のGenericCatalogクラスがあります。これを使うとオープンジェネリック型をエクスポートすることができます。ドキュメント不足な上に、ちょっと癖がありそうです。公開するインタフェースは、こんな感じです。}色々試した限りでは、実装クラスにExport属性を付けてもうまくいかず、インタフェースにInheritedExport属性を付ける必要がありました。オープンジェネリック型をエクスポートする場合は、インタフェースにInheritedExport属性を付けましょう。このエクスポートは発見されない。}テストなのでdynamicを使ってごまかしておきます。次にジェネリックインタフェースと実装クラスのマッピングを定義するクラスを用意します。GenericCatalogにこのクラスを渡すことで型を解決できるようになるようです。genericの場合、実装クラスとのマッピングを指定する必要がある。}準備ができたので、さっそく使ってみましょう。*/CodePlexのフォーラムやブログにあったサンプルが今のMefContribだと動かないので試行錯誤になりましたが、多分、こんな感じ。.NETMefContribにCastle以外にもLinFu.DynamicProxyが含まれていたので弄ってみたのですが、どうにも使い方が分かりません。}おおよそ、Casle.DynamicProxyと同じ使い方だと思うのですが、割り込み対象であるはずのinfo.Targetがプロキシになっているんですよね。Invokeするとまた、割り込みメソッドが呼び出され・・・スタックオーバーフロー。LinFuのサンプルを見るとインターセプタのコンストラクタで割り込み対象オブジェクトを渡す例が多く、InvocationInfoだけじゃ情報が足りていない気がします。}とすると動きました。.NET過去に似たようなことをやった気がしますが、今回はMefContribを使った一応、正式っぽい方法で。ここでは無条件に割り込ませるため、常にtrue。割り込み対象外のクラス用カタログ。Sub.-1*/InterceptingCatalogを使った割り込みですが、これが最終版ではなく、アイディア募集中みたいなことをどこかのフォーラムで見た気がします。あと、コメントにも書きましたが、Castle.DynamicProxyを使っている場合、interface継承もしくは、仮想メソッドでないと割り込みできないのですが、割り込み対象が存在しない場合、例外が発生してしまいます。バグだとは思いますが、取りあえずカタログを分けることで回避可能です。ネットで見かけたサンプルコードでは、ExportMetadata属性を使って割り込み対象の制御をおこなっていましたが、カスタム属性だとソースコードが必要な上、再コンパイルが必要です。AOP自体多用するものではありませんが、想定される使用状況を考えると、これはイマイチな気がしますね。.NETReSharperはコード分析してnull参照が発生する可能性があるところを指摘する機能があります。このように該当箇所に波線が出て便利です。メソッドの戻り値がnullの場合は、残念ながらチェックされません。この機能はカスタム属性が使われているので、nullチェックをしたいメソッドにカスタム属性を付けることで対応可能です。Annotationsを表示させると、カスタム属性のデフォルト実装をクリップボードへコピー出来るので、これを自分のプロジェクトに取り込みます。これでReSharper側で使っているカスタム属性が利用できるようになりました。CanBeNull属性を付けることでコード分析がnull参照を検出できるようになりましたね。"Start")]ファイルを覗いてみると上記のようなカスタム属性が見つかります。このWebActivatorがアセンブリの読み込み時に指定されたメソッドを呼び出してくれるのでした。ところで、.NET4のFCLをチェックしている人なら、System.Web.PreApplicationStartMethodAttributeと同じじゃないの?と疑問に思うかも知れません。違いを確認するために以下のシナリオを考えてみます。「MEFと同時に他のフレームワークも使用する」で、NuGetを使って参照を追加すると、App_Startフォルダは以下のようになったとします。"Run")]が指定されることになるはずです。・・・が、これ、ビルドエラーになるんですよね。PreApplicationStartMethodAttributeは1アセンブリに1つしか付けられないの(AllowMultiple=false)・・・ぶっちゃけ、設計ミスですよね。assembly.先見の明が無かったと率直に言っています。いうことで、NuGetのプロジェクトではPreApplicationStartMethodAttributeの代わりにWebActivatorが使われているという訳でした。MVCからMEFを使えるのでご紹介。前提:NuGetがインストール済みなこと。MVC3のプロジェクトの用意しましょう。面倒なのでデフォルト実装ありで。MEFを使えるようにしましょう。Reference...」メニューが選べます。MefContrib.MVC3を選択してインストールします。すると、必要なライブラリがダウンロードされ、参照が追加されます。MVCからMEFを使うためのおまじないコードもプロジェクトに追加されます。興味があるなら、AppStart_MefContribMVC3.csを覗いてみてください。これで、MEFが使えるようになりました。実際に使ってみましょう。「Logics」ディレクトリにインタフェースを、「Logics.Impl」にその実装クラスを置くことにします。インタフェースはお馴染みの、これ。}}んで、テキトーな実装。}}MEFを使ってIGreetingをエクスポートしています。これをHomeControllerから使ってみましょう。}}IGreetingをインポートして呼び出すだけ。MefContrib.MVC3を使うと、そこそこ簡単にMEFが利用できますね。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。