zoukankan      html  css  js  c++  java
  • Prism 框架基础架构

    概要

    Prism提供指导,帮助您更轻松地设计和构建,灵活且易于维护的客户端业务应用程序,这些应用程序可在Windows运行时,Windows Presentation Foundation(WPF)桌面,Silverlight或Windows Phone 7上运行。随着时间的推移而演变

    使用体现重要架构设计原则的设计模式,例如关注点分离和松散耦合,Prism帮助您设计和构建体现重要的表示和业务逻辑的应用程序,这些应用程序通常与后端系统和服务交互,并使用分层架构,可以跨多个层进行物理部署。预计该应用程序将在其生命周期内发生重大变化,以响应新的需求和商机。简而言之,这些应用程序“经久耐用”,“为变革而打造”。不需要这些特性的应用程序可能无法使用Prism。

    社区

    WPF的Prism和Windows Runtime的SilverlightPrism拥有蓬勃发展的在线社区。

    在这些社区网站上,您可以发布问题,提供反馈或与其他用户联系以分享想法。社区成员还可以帮助Microsoft计划和测试未来的产品,并下载其他内容,例如扩展和培训材料。

    入门演示:

    示例中用到了8个子模块, 所有的子模块统一继承 IModule接口, 实现Initialize方法。如下代码所示:

    public class ModA : IModule
        {
    
            public ModA(IRegionViewRegistry registry)
            {
                this.regionViewRegistry = registry;
            }
    
            private readonly IRegionViewRegistry regionViewRegistry;
    
            public void Initialize()
            {
                regionViewRegistry.RegisterViewWithRegion(Module.ModA.ToString(), typeof(Hello));
            }
        }

    在启动项中的app.xaml中, 重写OnStartUp方法, 添加Bootstrapper类启动项。

     protected override void OnStartup(StartupEventArgs e)
            {
                base.OnStartup(e);
                Bootstrapper bootstrapper = new Bootstrapper();
                bootstrapper.Run();
            }

    Bootstrapper类的具体实现如下:

    class Bootstrapper : UnityBootstrapper
        {
            protected override DependencyObject CreateShell()
            {
                return this.Container.Resolve<MainWindow>();
            }
    
            protected override void InitializeShell()
            {
                base.InitializeShell();
    
                App.Current.MainWindow = (Window)this.Shell;
                App.Current.MainWindow.Show();
            }
    
            protected override void ConfigureModuleCatalog()
            {
                base.ConfigureModuleCatalog();
    
                ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
                moduleCatalog.AddModule(typeof(ModA.ModA));
                moduleCatalog.AddModule(typeof(ModB.ModB));
                moduleCatalog.AddModule(typeof(ModC.ModC));
                moduleCatalog.AddModule(typeof(ModD.ModD));
                moduleCatalog.AddModule(typeof(ModE.ModE));
                moduleCatalog.AddModule(typeof(ModF.ModF));
                moduleCatalog.AddModule(typeof(ModG.ModG));
                moduleCatalog.AddModule(typeof(ModH.ModH));
            }
        }

    在Bootstrapper中, 通过重写了 ConfigureModuleCatalog方法 , 添加各个子模块的 IModule具体实现。

    界面层:

    模块显示区域设置RegionName, 也可以利用后台代码进行程序集加载的方式, 如此固定是演示其效果: 

    项目解决方案:

     

     模块的实现示例代码, 通过RegisterViewWithRegion注册指定模块, 和向其指定的View页 :

    项目源代码

  • 相关阅读:
    solr dataimport 数据导入源码分析(九)
    正确理解ThreadLocal
    solr dataimport 数据导入源码分析(六)
    solr dataimport 数据导入源码分析(七)
    solr dataimport 数据导入源码分析(八)
    solr dataimport 数据导入源码分析(一)
    solr dataimport 数据导入源码分析(五)
    OpenGL光照、键盘
    OpenGL着色
    OpenGL纹理映射
  • 原文地址:https://www.cnblogs.com/zh7791/p/9264170.html
Copyright © 2011-2022 走看看