2014-05-06 61 views
1

是否可以通過mef使用契約名稱來獲取作爲接口導出的類的類型。如何知道類的原始類型作爲MEF中的接口導出

爲例,我想要得到的類型MailViewModel:

[Export(typeof(IPlugin), "Mail") 
public class MailViewModel: IPlugin { } 

與MEF我可以得到一個懶惰的合同名稱爲「郵件」,但我不知道怎麼弄的類型MailViewModel。

我需要知道這種類型,因爲我可以在類上導出IPlugin作爲特定屬性。根據此屬性,我將允許或不創建此插件的值(在導航方案中)。

當我出口我的課下他們的原始類型與[出口]我可以這樣寫知道,如果特定屬性裝飾我的類:

Attribute.GetCustomAttributes(typeof(myviewmodel), typeof(myattribute)); 

知道出口的種類和contractname(IPlugin和「郵件」),我如何知道導出的類是否使用特定屬性裝飾(不實例化)。

回答

1

這將爲您提供所有類型的導出具有某種類型和合同名稱。這是我的博客http://www.codewrecks.com/blog/index.php/2012/05/08/getting-the-list-of-type-associated-to-a-given-export-in-mef/

private static IEnumerable<Type> GetExportTypes(ComposablePartCatalog catalog, Type type, string contractName) 
    { 
     return catalog.Parts.Where(
      part => 
      part.ExportDefinitions.Any(
       e => 
       e.ContractName == contractName && e.Metadata.ContainsKey("ExportTypeIdentity") && 
       e.Metadata["ExportTypeIdentity"].Equals(
        type.FullName))).Select(part => ReflectionModelServices.GetPartType(part).Value); 
    } 
+0

作品,謝謝 – kdev