Vous ne pouvez pas décharger un module entier, cependant. Vous pouvez dynamiquement charger un, mais ne pas en décharger un. Pour plus d'informations lire chargement des modules à la demande dans l'article suivant: http://msdn.microsoft.com/en-us/library/dd458911.aspx
Assomption: Je vais commencer avec l'hypothèse que lorsque vous dites que vous voulez décharger un module, vous voulez vraiment que tous les de ses vues à supprimer de votre application.
Tout d'abord, parlons du fonctionnement de vos modules et de la façon dont ils affichent leur contenu sur votre shell.
Votre shell contiendra une ou plusieurs régions auxquelles vos modules peuvent ensuite enregistrer des vues à l'initialisation.
public MyFirstModule : IModule
{
IRegionManager _mgr;
public MyFirstModule(IRegionManager mgr)
{
_mgr = mgr;
}
public void Initialize()
{
_mgr.RegisterViewWithRegion("MainRegion", typeof(MyView));
}
}
Qu'est-ce que vous pouvez faire, cependant, est de changer votre initialisation du module pour suivre les vues qui ont été enregistrées avec ce module et les décharger, le cas échéant.
public MyFirstModule : IModule
{
IRegionManager _mgr;
IEventAggregator _agg;
IUnityContainer _container;
public MyFirstModule(IRegionManager mgr,
IEventAggregator agg,
IUnityContainer container)
{
_mgr = mgr;
_agg = agg;
_container = container;
}
List<object> Views = new List<object>();
public void Initialize()
{
_mgr.RegisterViewWithRegion("MainRegion",() =
{
MyView view = _container.Resolve<MyView>();
//Track this view so I can remove it if needed
Views.Add(view);
return view;
});
_agg.GetEvent<UnloadModuleRequest>.Subscribe(RemoveViews,
ThreadOptions.UIThread);
}
private void RemoveViews(string moduleToUnload)
{
//If this is true, that means the Shell is asking
//me to unload, so I will remove any views I've
//registered from any regions they were registered to
if(moduleToUnload == "MyFirstModule")
{
foreach(object view in Views)
{
_mgr.Regions["MainRegion"].Remove(view);
}
}
}
}
De cette façon, votre Shell peut publier un événement appelé UnloadModuleRequest
(de type CompositePresentationEvent<string>
) et ont un module d'écoute déchargent toutes les vues qu'il a enregistré. J'espère que cela est proche de ce que vous voulez.
Cela ne mentionne pas vraiment quoi que ce soit au sujet de décharger un module. –
Ce premier fil est plutôt bon, cependant. Quelques-unes des mêmes choses mentionnées ici apparaîtront probablement lors du "rechargement" du module. Peut-être que cette discussion parlera de poursuivre ce qu'il/elle essaie de faire ... il semblerait que l'OP ait une légère incompréhension de ce qu'est un module et que ce dernier l'évite beaucoup. Merci de l'avoir posté. –