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);
                }
            }
        }

  • 相关阅读:
    POJ 1659 Frogs' Neighborhood
    zoj 2913 Bus Pass(BFS)
    ZOJ 1008 Gnome Tetravex(DFS)
    POJ 1562 Oil Deposits (DFS)
    zoj 2165 Red and Black (DFs)poj 1979
    hdu 3954 Level up
    sgu 249 Matrix
    hdu 4417 Super Mario
    SPOJ (BNUOJ) LCM Sum
    hdu 2665 Kth number 划分树
  • 原文地址:https://www.cnblogs.com/iwangjun/p/2385812.html
Copyright © 2011-2022 走看看