MEF开放式泛型问题4.5(MEF open generic problems with 4.5)

2019-10-17 03:30发布

我们使用MEF的Contrib开放泛型支持是这样的:

[InheritedExport]
interface ITest2<T>
{
    void Execute();
}

class TestClass2<T> : ITest2<T>
{
    public void Execute()
    {
        Console.WriteLine();
    }
}

class Program
{
    static void Main(string[] args)
    {
        var catalog = new AssemblyCatalog(typeof(Program).Assembly);
        var container = new CompositionContainer(catalog);
        var test2 = container.GetExportedValues<ITest2<string>>();
    }
}

然而,由于安装的.NET Framework 4.5,此代码不再适用。 它不仅不再反对建立.NET 4.5或.NET 4.0之后的工作,但也打破现有的编译的应用程序。

看来,人们必须要么使用显式[导出(typeof运算(ITest2 <>))]对TestClass2属性,或改变定义:

[InheritedExport(typeof(ITest2<>))]
interface ITest2<T>
{
    void Execute();
}

没有人知道为什么这种情况已经改变? 奇怪的是,MEF的开放式泛型支持(4.5)也没有以开放的通用接口上的非类型[InheritedExport]属性。

我本来认为对[InheritedExport]的默认行为的一个开放通用接口上是相同的为[InheritedExport(typeof运算(ITest2 <>))]。

谢谢你,史蒂夫

Answer 1:

这是在.NET 4.5 MEF实施开放泛型支持的错误。 将固定在.NET Framework的下一个版本。

有几个变通他们都不理想。

  1. 使界面的抽象基类
  2. 从接口取出InheritedExport并明确标出派生类与属性导出。

我希望这有帮助。



Answer 2:

使用带有InheritedExport沿.NET 4.5实现开放仿制药时,这看起来像一个错误。 该MEF小组正在调查。

你声称通过添加[InheritedExport(typeof(ITest2<>))]ITest2<T>但是在我试图瑞普这一点,没有任何工作解决了该问题给你。 我只得到它通过将明确工作Export(typeof(ITest2<>))直接在Test2Class

你可以给你的receieving错误一些进一步的细节? 另外你还在使用MEF的contrib的东西还是你停止使用这个项目?



文章来源: MEF open generic problems with 4.5