[英]MEF ImportingConstructor ImportMany with Metadata
我正在使用 MEF 在構造函數中導入許多(帶有元數據)。 我已經按照視頻教程嘗試模仿它,但到目前為止還不太奏效。 簡而言之,我重新命名了一些東西並進行了總結,但是:
AbstractImportMe.cs
[InheritedExport(typeof(AbstractImportMe))]
public abstract class AbstractImportMe{
}
導入文件
[SimpleMetadata("Name")]
class ImportMe : AbstractImportMe
{
}
簡單元數據文件
[MetadataAttribute]
public class SimpleMetadata : Attribute,ISimpleMetadata
{
public string Name { get; private set; }
public SimpleMetadata(String Name)
{
this.Name = Name;
}
}
ISimpleMetadata.cs
public interface ISimpleMetadata
{
string Name { get; }
}
目錄.cs
[Export]
public class Catalog
{
public IEnumerable<Lazy<AbstractImportMe, ISimpleMetadata>> imports = null;
[ImportingConstructor]
/*this runs but the imports field has 0 parts*/
public Catalog([ImportMany] IEnumerable<Lazy<AbstractImportMe, ISimpleMetadata>> imports)
{
this.imports = imports;
}
/* this code works, but it lacks metadata
public IEnumerable<AbstractImportMe> imports= null;
[ImportingConstructor]
public Catalog([ImportMany] IEnumerable<AbstractImportMe> imports)
{
this.imports = imports;
}
*/
}
然后我調用這個代碼:
AggregateCatalog catalog = new AggregateCatalog(newAssemblyCatalog(Assembly.GetEntryAssembly().Location));
CompositionContainer container = new CompositionContainer(catalog);
Catalog catalog = container.GetExportedValue<Catalog>();
代碼運行,但我沒有得到任何 catalog.imports。 當我查看目錄時,有 1 個導出的目錄和一個 AbsractImportMe。
如前所述,當我從導入中排除元數據時,它工作正常。 所以我想我在元數據方面犯了一個錯誤。
我發現了這個問題,我需要在基類中添加一個元數據標簽以保持簽名一致。 由於導出是繼承的,它保留了簽名。
[InheritedExport(typeof(AbstractImportMe))]
[SimpleMetadata("Abstract")]
public abstract class AbstractImportMe{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.