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章 模块化应用程序开发
模块化应用程序是指将一个应用程序拆分成一系列的可以组合的功能单元.一个客户端模块封装了应用程序的一部分,并且通常是一系列相关的关注点.它可以包含一个相关的组件的集合,就像用户界面,应用程序功能,和一些 ...
随机推荐
- Java GC随笔
最近发生了一些C#程序运行时的一些问题,发现是GC导致的问题,然后稍微研究了一下GC,因为知道Java的GC要比.NET稍微复杂一点,所以我觉得要是能弄懂Java的GC的原理,对.NET的GC的理解也 ...
- I.MX6中PC连接开发板问题
修改板端的文件 添加登录密码: passwd vi /etc/network/interrfaces 在auto eth0下增加auto eth1 如果采用固定ip方式可以在后面增加一段固定ip设置 ...
- MVC 中的家常事
对于@后面变量加上括号解决异意的方法 例如: hello@User.Name 会误判为电子邮箱,解决办法是括号,即hello@(User.Name) 使用@Html.Raw()输出后台到.cshtml ...
- oracle查看被锁的表以及解锁表
在oracle 上面查看别锁定的表,以及解锁表的sql: select t3.object_name,t3.owner,t2.machine,t2.sid,t2.serial# from v$lock ...
- storm(一) window机制
Watermark作用 在解释storm的window之前先说明一下watermark原理. Watermark中文翻译为水位线更为恰当. 顺序的数据从源头开始发送到到操作,中间过程肯定会出现数据乱序 ...
- LA 5713 秦始皇修路
https://vjudge.net/problem/UVALive-5713 题意: 秦朝有n个城市,需要修建一些道路使得任意两个城市之间都可以连通.道士徐福声称他可以用法术修路,不花钱,也不用劳动 ...
- No input file specified. nginx服务器报错解决
配置虚拟域名的时候报No input file specified. 仔细观察一圈也没有发现任何错误,最终,我把注意力放到 \ 上.才发现问题. 以前我都是直接copy文件路径过去 文件里面 都是使用 ...
- 关于推荐库位 java前端与SQL语句后面的结合
----------------------------------------------------------------------------------- select a1.id,a1. ...
- python2.7.10 VS2015编译方法
打开 Python-2.7.10\PCbuild目录 然后设置只编译python和pythoncore: 好了,编译试一试. 出现了好几个错误.由于 VS2015 取消了 timezone 的定义,改 ...
- 简单搭建FastDFS分布式文件系统(简单易懂)
一.什么是FastDFS FastDFS一个开源的轻量级分布式文件系统,它对文件进行管理,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,功能包括:文件存储.文件同步.文件访 ...