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