MEF 抛出异常 ImportCardinalityMismatchException

本文关键字:ImportCardinalityMismatchException 抛出异常 MEF | 更新日期: 2023-09-27 18:32:00

MEF 抛出 ImportCardinalityMismatchException 的可能原因是什么?

MEF 抛出异常 ImportCardinalityMismatchException

下面的代码演示了如何重现此错误。

若要进行测试,请确保使用 .NET 4.5 进行编译,并添加 MEF 程序集:

  • 系统.组件模型.组成
  • 系统.组件模型.组合.注册

问题是 MEF 想要构造一个 Person 对象,但它无法完成"Age"(标记为"导入")的属性注入。

要重现错误,请注释掉下面标记的行。

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; }
    }
}
相关文章:
  • 没有找到相关文章