J'ai des problèmes avec l'hébergement d'une application prisme WPF dans un contrôle ElementHost et je suis désespéré pour l'aide.Problèmes avec Prism hébergé dans un WinForm ElementHost
L'application PRISM fonctionne très bien dans Silverlight et dans un WPF autonome.
Le shell principal semble bien configuré dans l'élément elementHost sur un formulaire WinForm, mais les autres vues ne sont chargées que par la procédure "RegisterViewWithRegion" et non par la procédure "Add, Activate". J'ai besoin de "Ajouter, Activer" pour la portée. Cependant je crois que le problème est que je charge mon shell deux fois ... pas exprès. Je n'arrive pas à trouver un moyen d'appeler le bootsrapper et de définir l'elementHot sans appeler "Resolve" deux fois.
Voici le code pour mon WinForm et mon bootstrapper. Encore une fois tout fonctionne en utilisant "RegisterViewWithRegion".
Voici le Winform Constructor:
public Form1()
{
InitializeComponent();
if (System.Windows.Application.Current == null)
{
new MyApp();
}
Bootstrapper bootStrapper = new Bootstrapper();
bootStrapper.Run();
var shellElement = bootStrapper.Container.Resolve<ShellContainer>();
//Attach the WPF control to the host
elementHost.Child = shellElement;
}
Voici le programme d'amorçage:
public class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve<ShellContainer>();
}
protected override void InitializeModules()
{
IModule moduleSurvey = Container.Resolve<SurveyModule>();
moduleSurvey.Initialize();
}
}
Je voulais aussi mentionner qu'il n'est pas nécessaire d'initialiser les modules vous-même. Vous devez remplacer le GetModuleCatalog, plutôt que d'initialiser les modules vous-même. Vous assumerez ainsi un peu moins la responsabilité de l'UnityBootsrapper. La plupart des gens remplacent InitializeModules juste pour mettre dans une petite logique qui doit se déclencher avant que les modules doivent initialiser et ils appellent base.InitializeModules() après qu'ils soient terminés. –
Vous pouvez voir ici le code actuel pour les InitializeModules dans le bootstrapper de base fait des choses intéressantes que vous êtes en train de surcharger: http://msdn.microsoft.com/en-us/library/dd490820.aspx La section juste en dessous de la le code de la méthode InitializeModules montre comment retourner un catalogue de modules :) –