Prism 4 文档 ---第2章:初始化Prism应用程序

- 你需要去决定是否使用MEF,Unity或者其他的依赖注入容器,这将决定你将使用哪个引导程序类或者你需要自己为其他的依赖注入容器创建一个引导程序类
- 你需要考虑清楚应用程序的单独的服务,这需要在容器中被注册
- 决定是否使用内置的日志服务或者你需要自己创建另外的日志服务
- 决定模块是如何被应用程序查找并加载:代码方式明确声明,代码方式标记模块的属性,扫描路径,配置或者在XAML中
剩下的章节将会提供更多的细节
protected override DependencyObject CreateShell() |
实现InitializeShell 方法
当你创建了一个Shell之后,你将会运行初始化步骤来确保这个Shell已经可以被显示,根据你创建的是一个WPF或者Silverlight应用程序,这个InitalShell方法将会不同。
在Sliverlight应用程序中,你将会看到Shell作为应用程序的visual root,如下所示:
protected override void InitializeShell() |
protected override void InitializeShell() |
protected override IModuleCatalog CreateModuleCatalog() |
服务接口 |
描述 |
---|---|
IModuleManager |
定义检索并初始化应用程序模块的服务的接口。 |
IModuleCatalog |
包含应用程序的模块中的元数据。Prism库提供了几个不同的目录。 |
IModuleInitializer |
初始化模块 |
IRegionManager |
注册和检索的区域,这是可视化的容器进行布局。 |
IEventAggregator |
发布者和订阅者之间的松耦合事件的集合。 |
ILoggerFacade |
一个日志机制的封装,所以你可以选择你自己的日志记录机制, 例如,你可以 通过EnterpriseLibraryLoggerAdapter类使用企业级类库Stock Trader Reference Implementation (Stock Trader RI)记录应用程序块。通过在引导程序中Run方法使用的CreateLogger 方法的返回值,日志服务被注册在容器内。 在引导程序中不去重写CreateLogger 方法而在在容器中注册另一个记录器将不起作用。 |
IServiceLocator |
允许Prism类库访问容器,如果你想自定义或者扩展类库,它或许将很有用。 |
Stock Trader RI中的服务 |
描述 |
---|---|
IMarketFeedService |
提供了实时的 (模拟) 市场数据. 当从服务中收到数据时PositionSummaryPresentationModel 将会更新屏幕上的点的位置 |
IMarketHistoryService |
提供用于显示的趋势线所选基金历史市场数据。 |
IAccountPositionService |
提供资金的投资组合名单。 |
IOrdersService |
持续提交的买/卖订单。 |
INewsFeedService |
提供选定基金的新闻条目。 |
IWatchListService |
处理被添加到观察名单中的新条目 |
C# UnityBootstrapper.cs | |
---|---|
protected virtual void ConfigureContainer() |
引导程序的RegisterTypeIfMissing 方法 决定了一个服务是否已经被注册,它不会被重复注册,这允许你可以通过配置来重写默认的注册信息,你也可以关闭默认注册任何服务;要做到这一点,使用重载Bootstrapper.Run方法并传入false。你也可以重写方法并且禁用你不想使用的服务,例如事件聚合器。
注意:如果你关闭的morning注册的服务,你需要手动的注册一些必须的服务。
为了扩展ConfigureContainer的默认行为,只需添加一个覆盖你的应用程序的引导程序的实现并且可选调用基类的实现,就像下面来自Modularity for WPF (with Unity) QuickStart中QuickStartBootstrapper工程中的代码一样,在它的实现中调用了基类的实现,注册了IModuleTracker的实现ModuleTracker类型,并且使用Unity注册了CallbackLogger的单例callbackLogger。
C# | |
---|---|
protected override void ConfigureContainer() |
MefBootstrapper 类的CreateContainer 方法做了几件事情。首先,他创建了AssemblyCatalog 和CatalogExportProvider。CatalogExportProvider允许MefExtensions程序集提供一系列Prism类型的导出,而且允许你重写默认的注册。CreateContainer使用CatalogExportProvider创建并返回了CompositionContainer的实例,在大多数情况下,您不需要更改此功能;然而,该方法是虚方法,从而具有灵活性。
注意:在Silverlight中,由于安全限制,不能使用类型信息来检索程序集,作为替代,Prism使用另外的方法,就是使用Assembly.GetCalllingAssembly方法来实现。
在容器被创建之后,肯呢个需要为你的应用程序做些配置,在MefBootstrapper中ConfigureContainer的实现中默认注册了一系列Prism核心的服务,如下所示:如果重写此方法,慎重考虑是否应该调用基类的实现注册Prism核心服务,或者您会在您的实现提供这些服务。
C# | |
---|---|
protected virtual void ConfigureContainer() |
注意:在MefBootstrapper中,Prism的核心服务是以单例的形式添加到容器中的,所以他们可以在整个应用程序中通过容器来定位。
C# | |
---|---|
protected override void ConfigureAggregateCatalog() |
Prism 4 文档 ---第2章:初始化Prism应用程序的更多相关文章
- Prism 4 文档 ---第11章 部署Prism应用程序
要成功移动Prism应用到生产中,需要对部署计划为应用程序的设计过程的一部分.本章介绍了注意事项和你需要采取的准备以部署应用程序,以及你要在用户手中获得部署程序所需要采取的行动. Si ...
- Prism 4 文档 ---第7章 组成用户界面
一个应用程序的用户界面(UI)可以通用以下几种模式之一来构建: 窗体所需要所有的控件都包含在一个单独的XAML文件中,在设计时组合这个窗体. 窗体的逻辑区域被分割到单独的部分中,通常指哟过户控件.这些 ...
- Prism 4 文档 ---第3章 管理组件间的依赖关系
基于Prism类库的应用程序可能是由多个松耦合的类型和服务组成的复杂应用程序,他们需要根据用户的动作发出内容和接收通知进行互动,由于他们是松耦合的,他们需要一种方式来互动和交流来传递业务功能的需求. ...
- Prism 4 文档 ---第10章 Silverlight和WPF之间共享代码
本主题帮助你理解来自Prism的多目标和它的优缺点.多目标的代码针对两个不同的平台有大致相同的代码库.这允许同时保持代码尽可能多一样能够产生针对两种不同技术的二进制文件.在这种情况下,本节介绍 ...
- Prism 4 文档 ---第8章 导航
作为同用户具有丰富的交互的客户端应用程序,它的用户界面(UI)将会持续不断的更新来反映用户工作的当前的任务和数据.用户界面可以进行一段时间相当大的变化作为用户交互的应用程序中完成各种任务.通过 ...
- Prism 4 文档 ---第6章 高级MVVM场景
在上一章中描述了如何通过将UI,表现逻辑,业务逻辑分别放到三个单独的类中(View,View Model,Model),实现这些类之间的交互(通过数据绑定,命令以及数据验证接口)以及实现一个策 ...
- Prism 4 文档 ---第9章 松耦合组件之间通信
当构建一个大而负责的应用程序时,通用的做法时将功能拆分到离散的模块程序集中.将模块之间的静态引用最小化.这使得模块可以被独立的开发,测试,部署和升级,以及它迫使松散耦合的沟通. 当在模块之间通信时,你 ...
- Prism 4 文档 ---第5章 实现MVVM模式
MVVM模式有助于清楚的区分应用程序界面的业务层和展现层.保持一个清晰的应用程序逻辑和UI分离有助于处理开发和设计过程中大量的问题,同时,使得应用程序的测试,维护,和扩展更加容易.MVVM也可 ...
- Prism 4 文档 ---第4章 模块化应用程序开发
模块化应用程序是指将一个应用程序拆分成一系列的可以组合的功能单元.一个客户端模块封装了应用程序的一部分,并且通常是一系列相关的关注点.它可以包含一个相关的组件的集合,就像用户界面,应用程序功能,和一些 ...
随机推荐
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (set维护)
注意题目保证不会有一个矩形完全包括另一个矩形的情况 时间序上从后往前看,一个坐标\((x,y)\)加进来之前,如果已经有\(x_i<x\),则对结果的贡献为\(x-x_i\);若不存在\(x_i ...
- HDU - 4725 The Shortest Path in Nya Graph(拆点+Dijkstra)
题意:N个点,每个点有一个层号L,相邻的两层 Li 与 Li+1 之间的距离为C.另外给出M条无向边,求从点1到点N的最短路. 分析:同一层之间的两点距离并不是0,这是一个小坑.依次把相邻两层的所有点 ...
- 【android】开源一个企业通讯录app
软件背景:该app不是替代手机通讯录,而是对其一种补充.项目只是通讯录客户端,数据源是访问本地.还是访问远程服务器,由你来实现 开源地址:http://git.oschina.net/yso/Smar ...
- 如何在idea中设置 jsp 内容修改以后,立即生效而不用重新启动服务?
点击 run---->edit configuration--->
- Linux下修改时间
修改linux的时间可以使用date指令 date命令的功能是显示和设置系统日期和时间. 输入date 查看目前系统时间. 修改时间需要 date -功能字符 修改内容 命令中各选项的含义分别为: - ...
- c++之旅:函数模板
函数模板 函数模板主要是泛型在函数的中的应用,通过泛型可以让函数处理各种各样的数据类型 简单的列子 #include <iostream> using namespace std; tem ...
- java: -source 1.6 中不支持 switch 中存在字符串
最近在使用IDEA进行单个文件编译的时候给我报错,如题. 解决办法:将 Modules --->Sources ---> Language level 改为 7.0就ok了.
- oracle在cmd下通过命令导入导出数据
1.首先在cmd下切换到oracle的客户端的exp.exe所在的bin目录下,例如 D:\oracle\product\10.2.0\client_2\BIN 数据导出:导出的数据库名称是在tnsn ...
- iis原理介绍
它是一个程序,负责对网站的内容进行管理,以及对客户的请求(就是Http请求)做出反应.当用户对一个页面提出请求时,IIS做如下反应(忽略权限):1.把对方请求的虚拟路径转换成物理路径2.根据物理路径搜 ...
- spark client + yarn计算
前提:完成hadoop + kerberos安全环境搭建. 安装配置spark client: 1. wget https://d3kbcqa49mib13.cloudfront.net/spark- ...