2010-04-22 17 views
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 
{ 
    .... 
} 

回答

3

你重新编译你的扩展对.NET 4.0?如果这些扩展引用了MEF的codeplex预览版本,那么.NET 4.0 MEF将不会提取它们。这是因为导出属性将来自具有不同强名称的程序集,.NET 4.0 MEF对此一无所知。

+0

是的,我已经重新编译它为.net 4程序集。没有不同。另外值得注意的是,使用AssemblyCatalog()会产生相同的结果(传递正确的程序集)。 – 2010-04-22 02:23:33

+0

@BigJason你的意思是“它不起作用”呢? GetExportedValues()返回一个空列表? – 2010-04-22 04:45:09

+0

经过进一步审查,你是对的。有一个引用隐藏在dll中的旧的mef预览。谢谢您的帮助。 – 2010-04-22 05:22:09

相关问题