我有一个shell项目,它会在我的启动器中加载模块,并将这些模块放入我的shell主视图中的选项卡控件中。
我刚刚在选项卡上实现了一个关闭按钮,这就引出了一个问题:如何从shell重新加载模块视图?
尝试使用
moduleManager.LoadModule("ModuleA");
但这仅适用于模块首次加载。当我调用上述代码时,它会加载和初始化模块,并显示视图。如果我再次关闭视图,第二次尝试时它将不会重新显示视图(我猜测它不会重新初始化模块,因为它已经加载了)。因此,我考虑在我的shell中使用以下内容:
var moduleAView = ServiceLocator.Current.GetInstance<ModuleAView>();
regionManager.Regions["TabRegion"].Add(ModuleAView);
regionManager.Regions["TabRegion"].Activate(ModuleAView);
这种方法的问题是,我的shell如何知道第1行中的ModuleAView类型?我没有对模块A的引用,也不想添加引用。我考虑过让ModuleAView实现一个公共接口,可以在模块和shell之间共享,但是当我尝试使用上面提到的ServiceLocator.GetInstance方法时,出现了组合错误。
非常感谢您的帮助。
PS 这是我尝试过的模块A模块代码。
[ModuleExport(typeof(ModuleA), InitializationMode = InitializationMode.OnDemand)]
[Module(ModuleName="ModuleA")]
public class ModuleA : IModule
{
private IRegionManager _regionManager;
[ImportingConstructor]
public ModuleA(IRegionManager regionManager)
{
this._regionManager = regionManager;
}
public void Initialize()
{
// add the search view to the region manager.
this._regionManager.RegisterViewWithRegion("TabRegion", typeof(Views.ModuleAView));
}
}