Question

Cette question a également été affichée sur site de prisme sur Codeplex.

Je suis un peu perdu sur les modules de chargement à la demande, et j'espère que vous les gars peuvent me éclairer. J'utilise v2 # 7 .

Voici ce que je veux accomplir:

  

1) I have 2 régions - une pour les boutons qui instancier les modules (MenuRegion), l'autre pour faire apparaître les modules (MainRegion). Un seul module est d'être visible à un moment MenuRegion.
  2) Les modules sont à trouver dans un annuaire
  3) Le module MenuModule est associé à MenuRegion et de créer des boutons indiquant le nom du module. Lorsque l'un des boutons est cliqué, le module correspondant doit être chargé et affiché dans MainRegion.
  4) Comportement:
  a) bouton ModuleA est cliqué et ModuleA est affiché. L'utilisateur entre des données dans ModuleA et des données est laissé dans un état non enregistré.
  b) bouton ModuleB est cliqué et ModuleB est affiché. L'utilisateur entre des données dans ModuleB et des données est laissé dans un état non enregistré.
  c) bouton ModuleA est cliquez et ModuleA est affiché avec les informations entrées précédemment.

S'il vous plaît me corriger si je me trompe dans mes hypothèses, et s'il vous plaît me donner d'autres suggestions:

  

1) MainRegion devrait être un ContentControl, donc un seul module est visible à la fois.
  2) Je pense que je dois énumérer les « GrouplessModules » de mon catalogue pour obtenir le ModuleInfo pour les modules disponibles dans le répertoire
  3) Pour charger le module, je pense que je dois appeler myModuleManager.LoadModule (moduleName)

Enfin, mes questions:

  

1) Dois-je avoir le ModuleManager en tant que paramètre dans le constructeur de mon MenuModuleView
  2) Comment puis-je obtenir le catalogue accessible depuis l'intérieur MenuModuleView, afin d'énumérer les modules disponibles
  3) De MenuModuleView, comme je les énumérer modules, je crée les boutons, l'attribution de la ModuleInfo à la propriété Tag du bouton. De cette façon, je n'ai qu'un événement click pour charger le module. Est-ce correct? Ça sent un peu le travail aroundish pour moi ...

Merci beaucoup pour votre aide !!!

Était-ce utile?

La solution

  

1) Dois-je avoir le ModuleManager comme   un paramètre dans mes MenuModuleView de   constructeur?

Techniquement, vous pourriez

. En pratique cependant, si vous faites cela, vous voulez toujours définir un constructeur par défaut de votre vue. Dans le cas contraire, votre point de vue ne fonctionnera pas dans les concepteurs. Par conséquent, je recommande que les propriétés sont utilisées pour passer dans les dépendances aux composants de l'interface utilisateur.

  

2) Comment puis-je obtenir le catalogue accessible   à l'intérieur de MenuModuleView, afin   d'énumérer les modules disponibles?

Vous dépendra de l'interface IModuleEnumerator de prisme et l'injection de dépendance se chargera de fournir le module recenseur à votre vue. En supposant que vous utilisez Prism avec le conteneur de l'unité, qui ressemblerait à quelque chose comme ceci:

[Dependency]
public IModuleEnumerator ModuleEnumerator 
{
    get; set;
}
  

3) De MenuModuleView, comme j'énumérerai   à travers les modules, créer la   boutons, l'attribution de la ModuleInfo à   la propriété Tag du bouton. De cette façon, je   ont un seul événement click pour charger la   module. Est-ce correct? Ça sent un   bit travail aroundish pour moi ..

Je vous suggère d'avoir chaque bouton augmenter la même commande WPF et assigner à la place du ModuleInfo à la propriété Button du CommandParameter. Encore une fois, Prism dispose d'une infrastructure pour vous aider à le faire proprement dans un scénario composite. Voir la classe DelegateCommand.

Comme note finale, sachez que si vous pourriez être en mesure de charger paresseusement vos modules, vous ne serez pas en mesure de les décharger. Pour cela, vous aurez besoin d'isolement AppDomain, ce qui est un tout autre poisson de bouilloire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top