zoukankan      html  css  js  c++  java
  • wpf prism加载独立模块实例

    一、首先看看文件的组织架构

    module1 module2生成dll某块。Shell来显示管理模块

    二,看看关键bootstrapper类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace wpfPrismTest
    {
        using System.ComponentModel.Composition;
        using Microsoft.Practices.Prism.MefExtensions;
        using System.Windows;
        using Microsoft.Practices.Prism.Modularity;
        using System.ComponentModel.Composition.Hosting;
        using System.IO;  
        class QuickStartBootstrapper:MefBootstrapper
        {
            protected override DependencyObject CreateShell()
            {
                return this.Container.GetExportedValue<Shell>();
            }

            protected override void InitializeShell()
            {
                base.InitializeShell();

                Application.Current.MainWindow = (Shell)this.Shell;
                Application.Current.MainWindow.Show();
            }
            protected override void ConfigureContainer()
            {
                base.ConfigureContainer();
                AggregateCatalog.Catalogs.Add(new AssemblyCatalog(this.GetType().Assembly));

                if (Directory.Exists("./Modules"))
                {
                    this.AggregateCatalog.Catalogs.Add(new DirectoryCatalog("./Modules"));
                }
            }
            //protected override void ConfigureAggregateCatalog()
            //{
            //    base.ConfigureAggregateCatalog();

            //    // Add this assembly to export ModuleTracker
            //    this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(QuickStartBootstrapper).Assembly));


            //    // Module B and Module D are copied to a directory as part of a post-build step.
            //    // These modules are not referenced in the project and are discovered by inspecting a directory.
            //    // Both projects have a post-build step to copy themselves into that directory.
            //    DirectoryCatalog catalog = new DirectoryCatalog("Modules");
            //    this.AggregateCatalog.Catalogs.Add(catalog);
            //}
            protected override IModuleCatalog CreateModuleCatalog()
            {
                // When using MEF, the existing Prism ModuleCatalog is still the place to configure modules via configuration files.

                return new ConfigurationModuleCatalog();
                //return new DirectoryModuleCatalog() { ModulePath = @".Modules" };

            }
        }
    }
    还有module1 module类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.Practices.Prism;

    using Microsoft.Practices.Prism.MefExtensions;
    using Microsoft.Practices.Prism.Modularity;
    using System.ComponentModel.Composition;
    using Microsoft.Practices.Prism.Regions;
    using Microsoft.Practices.Prism.MefExtensions.Modularity;

    namespace Module1
    {
        [ModuleExport(typeof(Module1), InitializationMode = InitializationMode.OnDemand)]
        public class Module1:IModule
        {
            [Import]
            public IRegionManager TheRegionManager { private get; set; }
            /// <summary>
            /// Notifies the module that it has be initialized.
            /// </summary>
            public void Initialize()
            {
                TheRegionManager.RegisterViewWithRegion("MarketRegion1", typeof(ModuleView1));
            }
        }
    }
    三、在shell后端代码添加如下代码

            private void NavBarItem_Click(object sender, EventArgs e)
            {

                moduleManager.LoadModule("Module1");
                ItemsControl ic = new ItemsControl();
                RegionManager.SetRegionName(ic, "MarketRegion1");
                documentPanel.Content = ic;

            }

            private void NavBarItem_Click_1(object sender, EventArgs e)
            {
                ItemsControl ic = new ItemsControl();
                RegionManager.SetRegionName(ic, "MarketRegion2");
                documentPanel.Content = ic;
            }

    四、运行界面如下

  • 相关阅读:
    HTML DOM Document 对象
    浏览器对象模型 BOM
    JavaScript数组和字符串基础
    JavaScript基础一
    css属性hack
    浏览器兼容性问题
    css常见居中方法
    初析BFC
    学习Css的初级篇
    THML基础学习
  • 原文地址:https://www.cnblogs.com/tianmochou/p/7478683.html
Copyright © 2011-2022 走看看