2009-09-23 4 views
1

excuses pour le titre, je suis resté bloqué pour les motsExpose version du MEF chargée « plugin »

Je tremper mes orteils dans l'étang MEF. Jusqu'ici tout va bien. J'ai une application hôte et quelques assemblages "plugin" qui exportent des choses. L'application hôte définit un attribut appelé DescriptionAttribute qui hérite de ExportAttribute et possède une propriété Name simple. Mon formulaire de test a un <ImportMany>IEnumerable(Of Lazy(Of IDoStuff, IDescriptionAttribute)). Cela devient bien rempli par MEF, je peux tourner à travers la collection, la propriété Name est remplie, la vie est en or. Je vais diviser les choses en assemblages séparés plus tard, pour le moment c'est juste une preuve de concept.

Maintenant, la question est: Est-il possible que je peux exposer la version d'assemblage de la mise en œuvre IDoStuff, DescriptionAttribute portant des classes « plug-in » à travers l'attribut DescriptionAttribute que j'ai? Toutes mes tentatives pour le transmettre au constructeur de l'attribut ont échoué, studio ne cesse de me dire qu'une expression constante est nécessaire (c'est compréhensible). Je peux l'exposer par l'intermédiaire de l'interface IDoStuff, mais ce serait bien plus agréable de l'intégrer dans l'attribut DescriptionAttribute, qui "se sent" mieux. Je peux aussi le coder en dur, mais c'est un autre point que j'oublierais de mettre à jour lors de la sortie d'une nouvelle version d'un "plugin" :-)

Répondre

1

Donc vous avez un tas d'instances de classes qui implémentent IDoStuff, importées par MEF , et vous voulez connaître la version d'assemblage pour chacun d'entre eux?

Pouvez-vous le faire? GetType() retournera le type de la classe sous-jacente, non? Pas typeof (IDoStuff)?

// IDoStuff myStuffDoer 
var version = myStuffDoer.GetType().Assembly.GetName().Version; 
+0

Ah, le 'ol GetType, je n'oublie pas celui-là. Ouais, ce serait une solution viable. Et si j'ai besoin de quelque chose d'autre que cela, je pourrais le coder en dur en tant que paramètre de l'attribut DescriptionAttribute. Je l'ai essayé, ça marche, vous êtes un champion Matt! –