JohnSon:ModuleManager动态加载模块
[Export(typeof(VMShell))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class VMShell : NotificationObject
{
IEventAggregator eventAggregator;
Lazy<IModuleManager> lazyModuleManager;
IModuleManager moduleManager = null;
[ImportingConstructor]
public VMShell(IEventAggregator agg, Lazy<IModuleManager> module)
{
eventAggregator = agg;
lazyModuleManager = module;
ShowLoginView();
}
private void ShowLoginView()
{
//初始化ModuleManager,加载事件等
InitLoginManager();
//根据模块名取得模块信息
ModuleCatalog moduleCatalog = ServiceLocator.Current.GetInstance<ModuleCatalog>();
if (moduleCatalog == null) return;
ModuleInfo moduleInfo = moduleCatalog.Modules.FirstOrDefault(p => p.ModuleName == "ModuleLogin");
if (moduleInfo == null) return;
if (moduleInfo.State == ModuleState.Initialized)
{
//显示当前主视图
ShowLogin();
}
else if (moduleManager != null)
{
moduleManager.LoadModule("ModuleLogin");
}
string status = moduleInfo.State.ToString();
}
private void InitLoginManager()
{
if (!lazyModuleManager.IsValueCreated)
{
moduleManager = lazyModuleManager.Value;
moduleManager.ModuleDownloadProgressChanged += new EventHandler<ModuleDownloadProgressChangedEventArgs>(LoginModuleProgressChanged);
moduleManager.LoadModuleCompleted += new EventHandler<LoadModuleCompletedEventArgs>(LoadModuleCompleted);
}
}
void LoginModuleProgressChanged(object sender, ModuleDownloadProgressChangedEventArgs e)
{
//ModuleLoadedPercent = e.ProgressPercentage;
//if (ModuleLoadedPercent > 0 && ModuleLoadedPercent < 100)
// IsBusy = true;
//else
// IsBusy = false;
}
void LoadModuleCompleted(object sender, LoadModuleCompletedEventArgs e)
{
if (e.Error == null)
{
ShowLogin();
}
}
private void ShowLogin()
{
UserControl loginView = ServiceLocator.Current.GetInstance<UserControl>("ViewLogin");
if (loginView != null)
{
eventAggregator.GetEvent<ModuleEvent>().Publish(loginView);
}
}
}