Import MEF:如何从导出的对象导入?

Import MEF:如何从导出的对象导入?,import,assemblies,export,mef,Import,Assemblies,Export,Mef,我已经创建了一个MEF插件控件,可以导入到我的应用程序中。现在,我希望插件能够从应用程序导入部件。我不知道如何在插件中设置目录,以便它可以找到应用程序的导出。谁能告诉我这是怎么做的吗?下面是我的代码,当我尝试使用当前正在执行的程序集创建AssemblyCatalog时,该代码不起作用 [Export(typeof(IPluginControl))] public partial class MyPluginControl : UserControl, IPluginControl [I

我已经创建了一个MEF插件控件,可以导入到我的应用程序中。现在,我希望插件能够从应用程序导入部件。我不知道如何在插件中设置目录,以便它可以找到应用程序的导出。谁能告诉我这是怎么做的吗?下面是我的代码,当我尝试使用当前正在执行的程序集创建AssemblyCatalog时,该代码不起作用

[Export(typeof(IPluginControl))]
public partial class MyPluginControl : UserControl, IPluginControl

    [Import]
    public string Message { get; set; }


    public MyPluginControl()
    {
        InitializeComponent();
        Initialize();
    }

    private void Initialize()
    {
        AggregateCatalog catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
        CompositionContainer container = new CompositionContainer(catalog);
        try
        {
            container.ComposeParts(this);
        }
        catch (CompositionException ex)
        {
            Console.WriteLine(ex.ToString());
        }

    }
}

你不需要这样做

只需确保导入此插件时使用的目录包含主应用程序的程序集

[Export(typeof(IPluginControl))]
public partial class MyPluginControl : UserControl, IPluginControl

    [Import]
    public string Message { get; set; }


    public MyPluginControl()
    {
        InitializeComponent();
        Initialize();
    }

    private void Initialize()
    {
        AggregateCatalog catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
        CompositionContainer container = new CompositionContainer(catalog);
        try
        {
            container.ComposeParts(this);
        }
        catch (CompositionException ex)
        {
            Console.WriteLine(ex.ToString());
        }

    }
}
当MEF构造您的类型以便将其导出(以实现
IPluginControl
import-otherbee)时,它已经为您构成了这一部分,此时,它将导入“Message”字符串(不过,您很可能应该为该“Message”指定一个名称),或某种类型的自定义类型-否则,它将只导入一个字符串,并且您只能在应用程序中的任何位置使用单个“字符串”导出)

当MEF组合部件时,它会找到与指定类型匹配的所有类型(在本例中为
IPluginControl
),实例化单个对象,填充该对象的任何
[Import]
要求(这就是您不需要在构造函数中组合该对象的原因),然后将其分配给导入该类型的任何对象