2016-07-03 1 views
0

Cela peut être une question super simple, mais puisque Google a du mal à me donner des réponses que vous pourriez!Référencement d'ExportMetaData à partir de la partie MEF?

Je me demande si c'est possible pour une partie dans MEF de se procurer des valeurs définies dans ses propres ExportMetadata?

Disons que je suis arrivé ce code pour une partie:

[ExportMetadata("name", "A Template Plugin")] 
[ExportMetadata("guid", "0db79a169xy741229a1b558a07867d60")] 
[ExportMetadata("description", "A template for a new plugin")] 
[ExportMetadata("version", "1.0.0.43")] 
[Export(typeof(IPlugin)), PartCreationPolicy(CreationPolicy.NonShared)] 

public class PluginExport : IPlugin, IDisposable 
    { 
    ... code goes here... 
... can I get hold of metadata, ie the "guid" key ??? ... 
} 

Si quelqu'un remet en question la santé mentale de ce son bcause Im faire un modèle de plug-in pour 3pp développeurs et certaines valeurs (non représentées dans l'exemple ci-dessus) aussi doit être utilisé à partir du plugin et je pense qu'il serait bien de ne pas les avoir mis en place beaucoup de données dans deux endroits distincts.

Répondre

2

Vous pouvez utiliser réflexion quel que soit pour obtenir MEF la valeur d'attribut:

[ExportMetadata("guid", "0db79a169xy741229a1b558a07867d60")] 
class PluginExport 
{ 
    void PrintGuid() 
    { 
     var guid = this.GetType() 
         .GetCustomAttributes(false) 
         .OfType<ExportMetadataAttribute>() 
         .Single(attribute => attribute.Name == "guid").Value; 

     Console.WriteLine(guid); // Prints your value. 
    } 
}