私は、アプリケーションが使用する必要のあるデータアクセス層の実装を解決するために、WebベースのアプリケーションにWindsorIoCコンテナを使用しています。
WebアプリケーションのUIはページで構成され、各ページはポートレットと呼ばれる小さなユニットで構成されます。(それらの概念はウィジェットにいくぶん似ています。)これらのいわゆるポートレットは基本的にWebコントロールであり、実行時にすべてのページに対して個別に構成できます。
アプリケーションにはこれらの組み込みの一部が付属していますが、簡単に拡張できるようにしたいと思います。
このメカニズムがまさにMEFの目的であることがわかりました。そこで、MEFを使用してポートレットを検出するようにシステムを実装することにしました。そして、現在ウィンザーを使っていることもできることに気づいたので、ウィンザーを捨ててMEFを選ぶことにしました。
明らかに、DirectoryCatalogを使用する必要があります。これは、アプリのbinフォルダー内の.dllをスキャンし、必要なものをすべて返します。
StackOverflowのMEFに関するいくつかのチュートリアル、例、およびすべての質問も読みました。MEFを使用する最も簡単な方法は、Glenn Blockがチュートリアルで言及したPartInitializerを使用することであると考えましたが、MEFにはないことに気付きました。実際、それは私がCodePlexからダウンロードしたコードにありますが、別のアセンブリにあり、ソースのみであり、バイナリ形式ではありません。(これは、MEFの一部ではないという意味ですか?それとも、別のプロジェクトに配置する意味は何ですか?)次に、Silverlight用であることに気付いたので、あまり役に立ちません。(または、それを.NET 3.5に対してコンパイルするか、プロジェクトに含める必要があります。これで問題ありませんか?)
だから今私は次のような問題を抱えています:CompositionContainerをアプリケーションのどこに置くべきですか?
もう1つ考慮したいことがあります。アプリの存続期間中に、CompositionContainerを1つだけ使用する必要がありますか、それとも、必要なときに毎回コンテナーを作成する方がよいでしょうか。