かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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