かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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が使えます。