2010-05-17 10 views
1

Il existe plusieurs exemples d'utilisation de MEF pour insérer des packages contrôleur/vue entiers dans une application MVC, mais je n'en ai pas trouvé, utilisant MEF pour greffer des parties fonctionnelles utilisées par d'autres contrôleurs.Importation de modules MEF dans les contrôleurs MVC

Par exemple, pensez à un NewsService avec une interface simple comme

interface INewsService 
{ 
    List<NewsItem> GetAllNews(); 
} 

qui obtient nouvelles partout où il veut, et les renvoie dans une liste des bulletins d'informations. Ma page devrait charger un INewsService exporté et montrer les nouvelles sur la page.

Mais il y a le problème. Je ne peux pas simplement utiliser [Importer] dans les contrôleurs, car ils sont créés juste quand ils sont nécessaires.

Edit: (. Les importer à la classe principale MVCApplication ne fonctionne pas, becouse je ne peux pas y accéder à partir des contrôleurs) Je pense que je l'ai trouvé un moyen d'accéder à l'application principale via HttpContext.ApplicationInstance. Mais l'objet Service dans cette instance est null bien qu'il a été créé avec succès dans la méthode Application_Start(). Une idée pourquoi? Alors, comment puis-je accéder au NewsService à partir d'un contrôleur?

Merci à l'avance, Marques

Répondre

2

Vous devez créer un FAE ControllerFactory, qui utilisera un FAE CompositionContainer pour créer un contrôleur avec ses importations satisfait. Ensuite, vous pouvez simplement mettre une importation INewsService sur votre contrôleur. Il s'agit d'un sample qui montre comment procéder.

EDIT: Voici un autre sample qui semble un peu plus simple.

+0

Je n'aime pas la façon d'ajouter un ControllerFactory personnalisé, mais il semble que la seule bonne solution à ce jour. – Marks