zoukankan      html  css  js  c++  java
  • 【翻译】Prism4:初始化Prism应用程序(上)

    什么是Bootstrapper(引导程序)

    bootstrapper负责初始化使用Prism类库搭建的应用程序

    使用bootstrapper,你可以更方便的控制Prism类库组件与你的应用程序之间的关系

    Prism类库包含一个默认的抽象基类Bootstrapper

    这个类型可以与任何容器一起使用

    这个类型中的大多数方法都是虚方法

    你可以在你的bootsrapper实现中重写这些方法

    引导程序执行的基本步骤如下:

    image

    Prism类库提供了一些派生自Bootstrapper类的基类

    使用这些基类可以完成绝大多数应用程序

    继承实现bootsrapper,

    你需要做的工作只是创建和初始化框架界面

    依赖注入

    使用Prism类库搭建的应用程序需要使用依赖注入容器

    Prism支持Unity和MEF依赖注入容器

    并且允许使用其他的依赖注入容器

    引导程序的部分工作就是装配这个容器

    并为容器注册类型

    Prism类库包含UnityBootstrapper和MefBootstrapper类

    这两个类实现了使用Unity或MEF所必须的功能

    除了在前面的插图中展示的步骤

    这两个类型还添加了针对各自容器的特殊步骤

    创建框架

    一般创建WPF应用程序,

    APP.XAML中会指定一个启动画面的URI

    在Silverlight应用程序中

    APP.XAML的后端代码中指定了系统的RootVisual属性

    使用Prism类库创建应用程序

    bootstrapper负责创建框架画面

    这主要是因为框架画面依赖于服务

    这些服务类似与区域主管

    这些服务在框架画面显示之前被注册

    关键决定

    当你决定使用Prism类库

    还需要做出一些额外的决定:

    必须决定是使用MEF、Unity还是其他的依赖注入容器

    这决定你应该选择哪个bootstrapper类型

    还是需要为你自己的依赖注入容器创建一个新的bootstrapper类型

    你应该考虑你系统中的特殊服务单元,

    这些需要注册到依赖注入容器内

    判断是否系统内部集成的日志服务足够你使用了,

    如果不够你要自己创建你自己的日志服务

    决定系统如何发现模块

    使用目录查找、配置文件、或者xaml来加载模块

    (模块必须由明确的特性代码标记)

    关键场景

    指定有序的启动环节

    对你创建Prism应用程序来说非常有用

    这一小节主要描述怎样创建一个bootstrapper(引导程序)、

    并定制这个引导程序以启动自己的框架画面、

    配置依赖注入容器、

    注册系统级别的服务、

    怎样加载和初始化模块

    为你的应用程序创建Bootstrapper

    无论你是选择使用Unity还是MEF作为你的依赖注入容器

    为你的应用程序创建一个简单的bootstrapper

    都是非常容易的

    你可以创建一个派生自MefBootstrapper或者UnityBootstrapper的类

    然后重写CreateShell方法

    有时候你还需要为了特殊的业务需求而重写InitializeShell方法

    实现CreateShell方法

    CreateShell方法允许开发人员指定Prism应用程序的top-level(顶层)窗口

    Shell通常是指主窗口或注页面

    在这个方法的具体实现中返回一个Shell的实例

    在Prism应用程序中

    你可以创建一个Shell的实例

    也可以从依赖注入容器中取出shell的对象

    选择哪种办法,就看你的需求了。

    使用ServiceLocator从依赖注入容器中取出

    shell对象的示例代码如下:

    protected override DependencyObject CreateShell()
    {
        return ServiceLocator.Current.GetInstance<Shell>();
    }

    你会经常使用ServiceLocator(而不是特殊的依赖注入容器)来解析一些类型的实例

    ServiceLocator实现了调用依赖注入容器的逻辑

    这样主要是为了应对依赖注入容器代码不容易控制的特性

    你也可以通过直接引用类库来使用依赖注入容器

    实现InitializeShell方法

    当你创建了一个框架画面(shell)

    你需要执行初始化的几个步骤来确定你的框架画面可以被正常显示

    开发WPF和开发Silverlight应用程序

    InitializeShell方法的实现方式也会不同

    对于Silverlight应用程序来说

    你需要把框架画面设置成系统的visual root

    代码如下:

    protected override void InitializeShell()
    {
        Application.Current.RootVisual = Shell;
    }

    对于WPF应用程序

    你必须先实例化shell类型

    然后把这个实例设置成系统的主窗口

    代码如下:

    protected override void InitializeShell()
    {
        Application.Current.MainWindow = Shell;
        Application.Current.MainWindow.Show();
    }

    基类的InitializeShell方法什么也没有做,是个空方法

    不调用基类的InitializeShell方法也没有关系。

  • 相关阅读:
    struts2 CVE-2014-0050(DoS), CVE-2014-0094(ClassLoader manipulation) S2-20 DoS attacks and ClassLoader manipulation
    struts2 CVE-2013-4316 S2-019 Dynamic method executions Vul
    struts2 CVE-2013-2251 S2-016 action、redirect code injection remote command execution
    struts2 CVE-2013-1965 S2-012 Showcase app vulnerability allows remote command execution
    struts2 CVE-2012-0392 S2-008 Strict DMI does not work correctly allows remote command execution and arbitrary file overwrite
    struts2 Advanced Learning
    2015阿里安全峰会
    PHPCMS phpsso_serverphpcmsmodulesphpssoindex.php、apiget_menu.php Authkey Leakage
    CMSEASY /lib/tool/front_class.php、/lib/default/user_act.php arbitrary user password reset vulnerability
    QTVA-2015-198545、WooYun-2015-104148 .NET Framework Arbitrary File Permissions Modify Vul
  • 原文地址:https://www.cnblogs.com/liulun/p/2420970.html
Copyright © 2011-2022 走看看