3

我正在尝试使用 MEF 来帮助接受从数据库加载的插件的应用程序。当我尝试创建一个新的AssemblyCatalog并传入我动态创建的程序集时,MEF 似乎无法发现任何Exports.

Assembly a = Assembly.Load(new AssemblyMover().GetAssemblyBytes("Plugin1"));
AssemblyCatalog c = new AssemblyCatalog(a);

AssemblyCatalog不包含任何部分(但它应该)。

如果我将可导出类移动到当前程序集中,则运行以下命令:

AssemblyCatalog c = new AssemblyCatalog(Assembly.GetExecutingAssembly());

MEF 发现这部分很好(我会假设)。

该接口在共享程序集中定义:

public interface IPlugin
{
    string Name { get; }
}

该程序集Plugin1有一个类:

[Export(typeof(IPlugin))]
public class TestPlugin1 : IPlugin
{
    public string Name
    {
        get { return "Plugin1"; }
    }
}

我认为 MEF 使用反射来发现零件,因此我验证了程序集已正确加载并包含一个 class TestPlugin1

foreach (Type t in a.GetTypes())
        {
            MessageBox.Show(t.Name);
        }

有什么想法吗?

4

0 回答 0