




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Prism 学习(3)- 实现可插拔的模块一章中,我使用 Unity 重构了解决方案。不过在Application 工程中仍然需要引用其他各个依懒项。很明显,这样做并不能实现计算器模块的可插拔。今天,将以此为目标,对该解决方案进行再次的重构。首先,在使用 Prismcontainer.RegisterType<IInputParserService,框架加载的程序集中分别添加一个类,并让这些类实现IModule 接口。当 Prism 框架加载某个程序集后,将首先在 程序集中搜索实现了该接口的类。之后将会调用该接口的Initialize 方法。于是,我们可以在这个方法中实现程序集内
2、部的初化始操作,或者执行某个动作。通过这种机制,可以实现程序集的完全解藕。具体的操作如下:1. 在CalculatorLibrary 程序集中添加一个类:CalculatorModule并让其实现 IModule 接口。代码如下:public classCalculatorModule:IModule 3publicCalculatorModule(IUnityContainer container) 5this.container = container; 7void IModule.Initialize() 910container.RegisterType<ICalcula
3、tor, Calculator>();11IUnityContainer container;15 2. 在InputOutputLibrary 程序集中添加一个类:InputOutputModule ,并让其实现 IModule 接口。代码如下:public class InputOutputModule:IModule 3public InputOutputModule(IUnityContainer container) 5this.container = container; 710void IModule.Initialize() 9 container.Registe
4、rType<IInputService,ConsoleInputService>();11 container.RegisterType<IOutputService,ConsoleOutputService>("OutputService1");12 container.RegisterType<IOutputService,MsgBoxOutputService>("OutputService2");1314 15IUnityContainer container;1
5、6 3. 在CommandParserLibrary 程序集中添加一个类:InputOutputModule ,并让其实现 IModule 接口。代码如下:public class InputParsingModule : IModule 3public InputParsingModule(IUnityContainercontainer) 5this.container =container; 7void IModule.Initialize()10InputParserService>();1112 13IUnityContainer container;14 4. 在解决
6、方案中新建个类库: MainModuleLibrary ,在其中添加一个类:MainModule ,并实现 IModule 接口。这个类库将会作为计算器模块的入口, 在该类的 Initialize 方法中将会启动计算器。代码如下: 2public class MainModule: IModule 3public MainModule(IServiceLocatorserviceLocator) 5this.serviceLocator = serviceLocator; 7void IModule.Initialize() 910ICalculatorReplLoop loop = 11se
7、rviceLocator.GetInstance<ICalculatorReplLoop>();12 13loop.Run();1415 16IServiceLocator serviceLocator;17 到此,程序集部分的代码全部完成。可以看到,前三个程序集中Module 类,使用 Initialize 方法将各个类注册到了 Container 对象中,由Prism 框架进行管理。我们可以在需要的时候,在任何地方 通过 Prism 框架将其取得调用;第四个程序集作为计算器的入口,在 Module 类的 Initialize 方法中启动计算器。这里的 修改,我们
8、可以非常方便的对其进行调用,并且不需要任何 的引用 ,实现了完全的解藕。 下面的代码, 将指示我们如何在代码在上一章中基本都用过,在此不再描述。经过上面的主程序中启动这些程序集。如下:2static voidMain(string args) 3UnityContainerContainer = new UnityContainer(); 5Container.RegisterInstance<IServiceLocator>( 7new UnityServiceLocatorAdapter(Container); 8Container.RegisterType&a
9、mp;lt;IModuleInitializer,ModuleInitializer>();10 11ILoggerFacadelogger = new TextLogger();12Container.RegisterInstance<ILoggerFacade>(logger);13 14Container.RegisterType<IModuleCatalog,ConfigurationModuleCatalog>();15 16Container.RegisterType<IModuleManager,
10、ModuleManager>();17 18IModuleManagerManager =Container.Resolve<IModuleManager>();19Manager.Run();20 上面的代码中, ModuleInitializerTextLogger, ModuleCatalog三个类, 都是 ModuleManager的构造函数中所需要的。如果不注册,程序将会出错。在当前框架中, 实现了 ILoggerFacade 接口的类有多个。 直接使知道他的名称是什么,所以在此直接使用实体注册,这也可以实现同样的效果。 在程序启动运行时,
11、Prism 框架会去系用 RegisterType 来注册, 也将会报错, 我没有看源代码,不统的配置文件中加获取模块的信息,并加它们加载到系统中 这些配置跟上一章中的类的配置不一样,具体请参考下面的xml 文件: 2 <?xml version="1.0" encoding="utf-8" ?>3 <configuration> 4<configSections> 5<section name="modules" 6type="
12、;Microsoft.Practices.Prism.Modularity.ModulesConfigurationSection, Microsoft.Practices.Prism" /> 7</configSections> 8<modules> 9<module assemblyFile="CommandParserLibrary.dll"10moduleType="CommandParserLibrary.InputParsingModule, CommandP
13、arserLibrary"11moduleName="Parsing"/>12<moduleassemblyFile="CalculatorLibrary.dll"13moduleType="CalculatorLibrary.CalculatorModule,CalculatorLibrary"14moduleName="Calculator"/>15<moduleassemblyFile="InputOutputLibrary.dll&
14、quot;16moduleType="InputOutputLibrary.InputOutputModule,InputOutputLibrary"17moduleName="InputOutput"/>18<moduleassemblyFile="MainModuleLibrary.dll"19moduleType="MainModuleLibrary.MainModule,MainModuleLibrary"20moduleName="Main">21<dependencies>22<dependency<dependencymoduleName="Parsing" />23 moduleName="Calculator"/>24<dependency moduleName="InputOutput"/>25 </modules>28 </configuratio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水利工程施工及其环境影响的防范措施
- 探索2025年教育游戏化在儿童情绪管理教育中的教学设计创新报告
- 2025秋季幼儿园科学实验计划
- 物流行业运输文件管理方案
- 2025年文化创意产业园区建设项目申请报告:文化创意产业园区经济效益评估
- 2025年快时尚品牌数字化转型与消费者行为研究报告
- 教育行业2025年投资并购整合策略与教育投资并购投资策略优化报告
- 2025年婴幼儿配方食品营养配方与婴幼儿智力发展关系报告
- 工业互联网背景下2025射频识别(RFID)技术在物流行业中的应用报告
- 2025年食品饮料行业包装设计可持续发展理念与实践报告
- 中国饮食文化智慧树知到期末考试答案2024年
- MOOC 金融学-湖南大学 中国大学慕课答案
- 第五单元 单元作业设计 小学语文部编版三年级下册
- 成人氧气吸入疗法-中华护理学会团体标准
- 纳米银概念和作用课件
- 急性淋巴结炎的护理查房
- 基于SSM技术的企业招聘管理系统的设计
- 溢达公司介绍
- 医疗质量信息数据内部验证制度
- 新概念第二册 Lesson 41课件(共49张PPT)
- 食品添加剂复习题含参考答案
评论
0/150
提交评论