c# - 为什么使用 .net 4 最终版本的 MEF 后 GetExportedValues<T>() 不再起作用?

标签 c# .net .net-4.0 mef

过去几个月我一直在使用社区预览版开发托管可扩展性框架应用程序。我一直用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/

相关文章:

c# - 在网格类内拖放时鼠标位置错误

c# - LongRunning + AttachedToParent(同时)任务

c# - 将父类转换到子类

C# LdapConnection 身份验证问题

.net - 在包/命名空间级别添加 .NET 源文档以使用 Doxygen 进行处理

c# - 使用 EF 的 DbContext.ExecuteSqlCommand() 进行交易时出现异常

c# - 在 .NET 4.0 下使用 SmtpClient、SendAsync 和 Dispose 的最佳实践是什么

c# - 从公钥字节数组重新创建椭圆曲线的 X 和 Y

c# - 从 C++ 创建 .Net Standard 对象

c# - 从 IronPython 中的其他命名空间访问 C# 枚举和类