2009-12-09 5 views
12

J'essaie d'envelopper mon esprit autour de MEF. Il y a une chose que je ne comprends pas. Supposons que j'ai une interface, nommée ISomething, qui est un contrat, et que j'ai plusieurs assemblys dans un dossier qui contient mon application, et je n'ai aucune idée du nombre d'implémentations ISomething, ou de quel en contient un.MEF: Que se passe-t-il si j'ai plusieurs exportations mais que j'ai besoin d'une seule importation?

Si je crée une application hôte dans laquelle j'utilise MEF, et que je souhaite obtenir un ISomething, mais un seul, comment MEF décide-t-il quelle implémentation il va me donner?

Ou, de manière similaire à un conteneur IoC commun, comment puis-je lui indiquer l'implémentation à utiliser?

Merci d'avance pour vos réponses.

Répondre

12

Voir this blog post pour une discussion de ce problème et certaines des options dont vous disposez. En outre, Glenn Block a un billet de blog décrivant comment customize the container behavior with defaults.

+1

Le post de Glenn sur ExportProviders m'a juste donné une bonne idée. Peut-être que je devrais faire un exportProvider qui accepte une sorte de configuration dans laquelle l'exportation par défaut peut être spécifiée. – Venemo

+1

C'est parfaitement resonable, et c'était l'un des scénarios que nous avons considéré. –

11

Dans le cas du MEF, si vous avez beaucoup d'exportations qui satisferont une importation, vous avez deux options:

  1. changer votre importation autour d'utiliser [ImportMany]. Décidez, au moment de l'exécution, laquelle des importations à utiliser pour votre contrat, en sélectionnant simplement la première, ou une au hasard.
  2. Utilisez [ImportMany] en conjonction avec Metadata afin de décider quelle importation utiliser.
+0

C'est une bonne idée, cependant, je préférerais faire quelque chose comme dans Windsor, pour spécifier une implémentation concrète à partir de la configuration, et dire à MEF de l'utiliser. – Venemo

+0

@Venemo: Vous devriez être capable de le faire, en utilisant les métadonnées à l'exécution. –

Questions connexes