MEF が ImportCardinalityMismatchException をスローする理由として考えられるものは何ですか?
質問する
6468 次
1 に答える
4
以下のコードは、このエラーを再現する方法を示しています。
テストするには、必ず .NET 4.5 でコンパイルし、MEF アセンブリを追加してください。
- System.ComponentModel.Composition
- System.ComponentModel.Composition.Registration
問題は、MEF が Person オブジェクトを作成したいのですが、"Age" ("Import" としてマークされている) のプロパティ インジェクションを完了できないことです。
エラーを再現するには、以下の行をコメントアウトします。
using System;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.Reflection;
namespace ForStackOverflow
{
public class Program
{
public static void Main(string[] args)
{
var container = new CompositionContainer(
new AssemblyCatalog(Assembly.GetExecutingAssembly()));
// Comment out this next line to get an
// ImportCardinalityMismatchException error
container.ComposeExportedValue("Age", 30);
var person = container.GetExportedValue<Person>();
Console.WriteLine("Persons age: " + person.Age);
Console.WriteLine("[press any key to continue]");
Console.ReadKey();
}
}
[Export]
public class Person
{
[ImportingConstructor]
public Person()
{
}
[Import("Age")]
public int Age { get; set; }
}
}
于 2013-09-19T09:14:22.423 に答える