簡體   English   中英

MEF ImportingConstructor ImportMany with Metadata

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM