我们使用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 <>))]。
谢谢你,史蒂夫