Loading

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页 :

 

项目源代码

 

posted @ 2018-07-04 17:02  痕迹g  阅读(2662)  评论(5编辑  收藏  举报