簡體   English   中英

靜態類的C#MEF使用

[英]C# MEF usage with static classes

我的解決方案中有一個靜態類,該類用於處理各種程序集。 我想通過MEF鏈接它們,所以我在一個類中做了一個字段。

[Import(typeof(A))]
    static private A _a1;

然后我有一個方法,將程序集名稱作為參數傳遞給該方法:

    public static A LoadPackage(string filePath)
    {
            var catalog = new AggregateCatalog();
            catalog.Catalogs.Add(new AssemblyCatalog(filePath));
            var _container = new CompositionContainer(catalog);
            ???
    }

那么,現在有沒有辦法從文件路徑指定的程序集中導入類型?

我不能:

_container.ComposeParts(this);

由於課程是靜態的,我也不能這樣做

_container.ComposeParts(_a1);

(一開始可能是完全錯誤的),因為A沒有任何構造函數(因此_a1為null)

MEF旨在為您創建和初始化對象 它不處理靜態類中的狀態。

我建議您將類及其字段[PartCreationPolicy(CreationPolicy.Shared)]非靜態,並如果要強制執行單例行為,則將其標記為[PartCreationPolicy(CreationPolicy.Shared)]

另請參閱關於MEF和單例模式的其他問題

好吧,事實證明我正在尋找的方法是GetExportedValue (是的,我忽略了基本功能):

static private A _a1;

public static A LoadPackage(string filePath)
{
        var catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new AssemblyCatalog(filePath));
        var _container = new CompositionContainer(catalog);
        _a1 = _container.GetExportedValue<A>();
}

我的工作就填補了(以防萬一,我已經將它移到另一個班級了,現在看起來很整潔)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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