2010-12-02 6 views
0

J'utilise prism/mvvm/mef pour mon application, et le chargement de toutes les vues marquées avec ViewExport (Région) fonctionne bien (j'utilise le StockTraderRI AutoPopulateExportedViewsBehaviour).Comment utiliser MEF pour init un groupe de classes?

Maintenant, je voudrais utiliser cette fonction de recherche d'exécution pour initialiser d'autres classes d'arrière-plan.

dire que je suis une interface

public interface ITable 
{ 
} 

Et je suis beaucoup de classes provenant de cette interface.

Existe-t-il un moyen de marquer ces classes dérivées d'une manière ou d'une autre et de demander à MEF de les créer à l'exécution et de les ajouter dans une sorte de liste ou de conteneur?

Comme dans une région qui n'est pas montrée nulle part, je m'attendrais? Comment pourrais-je y parvenir en MEF?

Répondre

3

Bien sûr, il y a! Marquez les classes héritant de votre interface avec l'attribut Exporter et dans une autre classe créez vous-même une propriété dite de type générique ObservableCollection avec l'attribut [ImportMany]. Le devrait faire l'affaire.

+0

C'est tout? Mais comment est-ce que MEF sait quelles choses appartiennent à quelle collection? Par le type générique? – Sam

+1

Oui, vos différentes classes seront décorées avec [Export (typeof (ITable))] et MEF recherchera toute classe qui hérite ou correspond au type générique pour satisfaire votre collection, créer des instances et les ajouter à la collection. –

1

Si vous utilisez à la place, vous pouvez l'unité MEF également utiliser l'appel conteneur dans votre bootstrapper:

var tables = Container.GetExportedValues<ITable>(); 

Container est la propriété publique de votre MEFBootstrapper.

+0

Hein, qu'est-ce que l'Unité? – Sam

+0

c'est le conteneur d'injection de dépendance alternative. MEF est ma préférence cependant. – grimcoder

Questions connexes