かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

Silverlight 4のMEFのCompositionInitializerとCompositionHost

Silverlight 4のMEFは.NET Framework 4のMEFよりも、素敵な機能がいっぱいつまってます。その中の1つにデフォルトのコンテナを提供してくれるCompositionInitializerとCompositionHostというものがあります。
使い方は簡単で、SatisfyImportsメソッドの引数にインスタンスを渡すと、そのインスタンスにImportしてくれるというものです。

// thisに色々Importしてくれる
CompositionInitializer.SatisfyImports(this);

この時に使われるCompositionContainerは、CompositionHost.Initializeメソッドで行います。こいつは、CompositionContainerかCatalogを受け取ります。多分Initializeメソッドを使わない場合は、自分のアセンブリのクラスが対象にExportされてる状態になってると思います。

CompositionHost.Initialize(
  new AssemblyCatalog(typeof(App).Assembly),
  ...(そのほか使いたいCatalogを引数で渡す...);

デフォのコンテナを自分で保持するようにしなくてもいいので、お手軽にMEFが使えます。