4
我使用MEF下面的示例代碼: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類的聲明中,你有'Foo:IFoo '。這聲明瞭一個名爲'String'的泛型類型,它不使用實際的字符串類。你有什麼相當於'Foo :IFoo '。如果你想讓Foo不是泛型的,那麼永遠是一個'IFoo ',你需要做'Foo:IFoo '。如果您希望Foo類是通用類型的,我會將您的泛型類型重命名爲'',以減少混淆。 –
2011-02-23 15:02:57
感謝您發現錯誤 - 我過度壓縮了這個問題,並錯過了一個額外的聲明。我已經重新編輯了,現在Foo實現了IFoo ,並且Foo實現了繼承Foo (並導出IFoo )。 –
2011-02-26 09:31:44