我有以下使用MEF的示例代码:
public interface IFoo<T>
{}
public class Foo<T> : IFoo<T>
{}
[Export(typeof(IFoo<String>))]
public class Foo : Foo<String>
{}
public class Bar<T>
{
[Import]
private readonly IFoo<T> foo;
}
static void Main()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
var container = new CompositionContainer(catalog);
container.ComposeParts();
var bar = new Bar<String>();
//bar.foo would be null
}
这似乎不起作用 - foo
字段是null
。这是因为它的类型没有被MEF视为IFoo<String>
吗?
Foo<String>:IFoo<String>
。这声明了一个泛型类型,名称为String
,但它并没有使用实际的字符串类。你所拥有的等同于Foo<T>:IFoo<T>
。如果你想让Foo不是泛型的,总是作为IFoo<System.String>
,你需要做的是Foo:IFoo<String>
。如果你想让类Foo成为泛型的,我会将你的泛型类型重命名为<T>
,以使其更清晰易懂。 - David Yaw