我的应用程序允许用户编写可在运行时实例化的插件(实现IPlugin)。在启动时,解析插件.dll的目录,注册所有可用的插件信息。在运行时提供了一个GUI,使用户可以创建任何插件的实例。这工作正常。在运行时使用MEF加载插件
但是现在我看到了MEF,并希望我可以做同样的事情,但以更加优雅的方式代码化。
我到目前为止与MEF工作:在启动时,我正在导入一个目录中的所有插件(导出IPlugin)并读出名称,类别,作者等信息......这些被编码为插件类的导出元数据属性。导入是懒惰的,所以所有的插件在启动时都没有实例化,这很重要。
问题是,现在我不明白的方式在运行时优雅实例化一个选择的插件提供的额外的复杂的插件的构造是其输入参考到IPluginHost(它需要一个进口构造立即做一些初始化)。
与plugininfo一起,我在启动过程中将相应的导出保存在字典中,因此当GUI要求实例化给定特定插件信息的插件时,我可以访问导出(其中Export.Value是我的实际IPlugin)。但是从那里我怎么能创建插件的一个实例,并与IPluginHost组成?
我收集我应该编写自己的ExportProvider,当有人询问IPluginHost,但我没有访问程序集或特定插件的类型,它可以让我将它添加到目录,添加目录和ExportProvider添加到容器并在该容器上调用.ComposeParts。
我希望我做了我的问题清楚,如果没有,让我来试试问题的短版: 是不是对MEF标准的用例有一个程序在启动的时候懒加载插件解析可用的插件信息,然后在运行时创建特定的实例给予特定的plugininfos?将很好的获得所涉及步骤的代码行。
您是否已经成功使用MEF 2预览版1,我遇到了与.NET 4.0 System.Components.Composition的装配冲突! ExportFactory特别是我想要的! – 2010-07-23 09:12:31
对于迟到的回答感到抱歉。按照解释,我能够用ExportFactory解决我的问题。尽管使用.net 3.5。 – joreg 2010-07-25 11:27:14