2010-12-08 43 views
3

J'ai une application de référence qui fonctionnait et maintenant est cassé et je ne peux pas comprendre pourquoi. Le code qui me donne le problème est fondamentalement une copie exacte de l'exemple de Quickstart de Prism ModularityWithMef. Le module bootstrap est une copie exacte du Quickstart à l'exception de l'ajout de ma logique de découverte de module. Donc je ne l'inclut pas ici. Le problème que j'ai avec le code View de Shell est une copie presque exacte de Shell Codebehind de QuickStart. Le code est -Prism w/Mef Bootstrapping problème

namespace MvvmRefVer 
{ 
    using System.ComponentModel; 
    using System.ComponentModel.Composition; 
    using System.Diagnostics; 
    using System.Globalization; 
    using System.Windows; 

    using Microsoft.Practices.Prism.Logging; 
    using Microsoft.Practices.Prism.Modularity; 

    [Export] 
    public partial class Shell : Window, IPartImportsSatisfiedNotification 
    { 
     [Import(AllowRecomposition = false)] 
     private CallbackLogger logger; 

     [Import(AllowRecomposition = false)] 
     private IModuleManager moduleManager; 

     public Shell() 
     { 
      this.InitializeComponent(); 
     } 

     public void OnImportsSatisfied() 
     { 
     } 
     private void WindowClosing(object sender, CancelEventArgs e) 
     { 
      Application.Current.Shutdown(); 
     } 

     private void WindowLoaded(object sender, RoutedEventArgs e) 
     { 
      this.moduleManager.LoadModule("NavigationViewControlModule"); 
     } 
    } 

Le problème se produit dans cette fonction Bootstrapper -

protected override DependencyObject CreateShell() 
    { 
     var d = this.Container.GetExportedValue<Shell>(); 
     return d; 
    } 

Lorsque la GetExportedValue est appelée et [Import(AllowRecomposition = false)] définition ci-dessus de ModuleManager est présent, l'appel de fonction génère une exception non définie. Si je commente la ligne d'importation, le shell va se charger correctement, mais sans initialiser le moduleManager.

Mon problème est que je n'ai pas assez d'expérience avec MEF pour comprendre quel est le problème. En regardant les catalogues de mef, je peux voir que la bibliothèque Prism Modularity a été chargée.

Répondre

0

L'affichage du message et de la trace de pile de l'exception non définie aiderait.

Pour obtenir une aide générale sur la résolution de problèmes MEF, consultez mon article de blog sur How to Debug and Diagnose MEF Failures.

+0

Merci pour le lien. Avec info là, j'ai trouvé mon problème. J'avais un module qui était supposé charger à la demande, mais qui était chargé au démarrage avant que les données ne soient initialisées. Ce module lançait l'exception de l'argument null. Apprendre à aimer MEF, mais doivent apprendre de nouvelles façons de penser à la difficulté de tirer sur ces types de problèmes. –