[C#][MEF]Managed Extensibility Framework入門 その1
[C#][MEF]Managed Extensibility Framework入門 その2
[C#][MEF]Managed Extensibility Framework入門 その3
今回は、ExportAttributeをプロパティにつけたときの動作を見てみようと思います。
今までのExportは、一般的なDIコンテナにありがちな感じで、クラスにつけて他のクラスから使えるようにしていました。
このExport属性は、実はクラスだけではなく、プロパティにつけることもできます。こうすることで、プロパティの戻り値をImportのついているプロパティに設定することが出来ます。
using System;
using System.ComponentModel.Composition;
namespace MEFExportEdu
{
// メッセージを提供する人
public class MessageProvider
{
// Messageという名前でExport
[Export("Message")]
public string GreetMessage
{
get
{
return "Hello world";
}
}
}
[Export]
public class Greeter
{
// MessageをImport
[Import("Message")]
public string Message { get; set; }
public void Greet()
{
// 結果としてHello worldが表示されます
Console.WriteLine(Message);
}
}
}
そして、確認用のMainを作ります。
using System.ComponentModel.Composition.Hosting;
namespace MEFExportEdu
{
class Program
{
static void Main(string[] args)
{
var catalog = new AssemblyCatalog(typeof(Program).Assembly);
var container = new CompositionContainer(catalog);
// 実行!
var g = container.GetExportedObject<Greeter>();
g.Greet();
}
}
}
実行するとHello worldが表示されます。
この例では、とても無駄なような気がしますが、構成ファイルから読み込んだ文字列を、属性を指定するだけでさくっと取得できるようなことも出来そう。