2
我一直在使用社区预览开发最近几个月的托管扩展性框架应用程序。我一直在使用GetExportedValues()方法和PartCreationPolicy(CreationPolicy.NonShared)来伪造一个类工厂(因为只有silverlight版本支持工厂)。直到我将该项目升级到使用.net 4.0为止,这一切都很好。没有错误,它只是不起作用。为什么GetExportedValues <T>()在使用.net 4最终版本的MEF后不再有效?
那么为什么这段代码停止工作?代码如下:
工厂方法:
public static IEnumerable<DataActionBase> GetActionsFromDirectory(string PluginsFolder)
{
IEnumerable<DataActionBase> result = null;
var catalog = new DirectoryCatalog(PluginsFolder);
var container = new CompositionContainer(catalog: catalog);
result = container.GetExportedValues<DataActionBase>();
return result;
}
实例导出类:
[Export(typeof(DataActionBase))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class AnAction : DataActionBase
{
....
}
是的,我已经重新编译它为.net 4程序集。没有不同。另外值得注意的是,使用AssemblyCatalog()会产生相同的结果(传递正确的程序集)。 – 2010-04-22 02:23:33
@BigJason你的意思是“它不起作用”呢? GetExportedValues()返回一个空列表? – 2010-04-22 04:45:09
经过进一步审查,你是对的。有一个引用隐藏在dll中的旧的mef预览。谢谢您的帮助。 – 2010-04-22 05:22:09