http://mef.codeplex.com/wikipage?title=FAQ&referringTitle=Guide
CodePlexの上記のページを眺めていたらContractBasedImportDefinitionの引数が微妙に違うことに気づき、.NET Framework 4のMEFはどう書くんだろうか気になったのでためしにコードを書いてみました。
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Primitives;
using System.Linq;
using System.Text;
namespace Art55.MEFSample20100522_001
{
class Program
{
static void Main(string[] args)
{
var catalog = new TypeCatalog(new[] { typeof(A), typeof(B) });
var container = new CompositionContainer(catalog);
var importDefinition = new ContractBasedImportDefinition(
AttributedModelServices.GetContractName(typeof(A)),
AttributedModelServices.GetTypeIdentity(typeof(A)),
Enumerable.Empty<KeyValuePair<string, Type>>(),
ImportCardinality.ExactlyOne,
false,
false,
CreationPolicy.Shared);
Export export = container.GetExports(importDefinition).First();
A a = (A) export.Value;
a.Say();
}
}
[Export]
class A
{
[Import]
public B BObject { private get; set; }
public void Say()
{
BObject.Say();
}
}
[Export]
class B
{
public void Say()
{
Console.WriteLine("B Say.");
}
}
}
実行すると
B Say.
とまあいつものとおり動きました。
ExportProvider.GetExports メソッド (ImportDefinition)は指定したインポート定義の条件に一致するすべてのエクスポートを取得します。との事なので属性付きプログラミングモデル以外で自作でExportProviderを自作したい場合に何らかの方法でImportが指定されたプロパティなどからImportDefinitionを作成して、GetExports メソッドを呼び出せばいいかなーなんて・・・・たぶん。
- 2010.05.22 Saturday
- MEF
- 23:50
- comments(0)
- trackbacks(0)


- by art55


















