过去几个月我一直在使用社区预览版开发托管可扩展性框架应用程序。我一直用GetExportedValues()方法和PartCreationPolicy(CreationPolicy.NonShared)伪造一个类工厂(因为只有 silverlight 版本支持工厂)。在我将项目升级为使用 .net 4.0 之前,它一直运行良好。没有错误,只是不起作用。
那么为什么这段代码停止工作了呢?代码如下:
工厂方法:
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.0 重新编译了扩展?如果扩展引用 MEF 的 codeplex 预览版本,则 .NET 4.0 MEF 将不会选择它们。这是因为导出属性将来自具有不同强名称的程序集,而 .NET 4.0 MEF对此一无所知。
关于c# - 为什么使用 .net 4 最终版本的 MEF 后 GetExportedValues<T>() 不再起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2687370/