zoukankan      html  css  js  c++  java
  • 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);
                }
            }
        }

  • 相关阅读:
    在给定的区间上对每个数都开方 最后还是在一段上求和
    简单的覆盖问题,,通过覆盖的g不同 有这不同的价值 最后还是一段上求和
    codevs 3094 寻找sb4
    noi 04:网线主管
    codevs 1031 质数环
    codevs 1061 重复子串
    codevs 1204 寻找子串位置
    codevs 3223 素数密度
    各种用法
    codevs1073 家族
  • 原文地址:https://www.cnblogs.com/iwangjun/p/2385812.html
Copyright © 2011-2022 走看看