




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/ZHHX 004-2024粉苞酸脚杆盆花生产技术规范
- 急救知识培训课程大纲
- 临产呼吸技巧专项训练
- 2025运城师范高等专科学校辅导员考试试题及答案
- 2025西安欧亚学院辅导员考试试题及答案
- 2025辽宁民族师范高等专科学校辅导员考试试题及答案
- 2025苏州城市学院辅导员考试试题及答案
- 2025福建卫生职业技术学院辅导员考试试题及答案
- 四川绵阳中山长虹电器有限公司招聘笔试题库2025
- 室内设计概论
- 基于PLC的药房取药系统设计
- 2023年南方科技大学机试样题练习
- GB/T 24282-2021塑料聚丙烯中二甲苯可溶物含量的测定
- GB/T 16447-2004烟草及烟草制品调节和测试的大气环境
- 讲义配电房可视化管理标准课件
- 建筑大师伊东丰雄简介及作品集课件
- 《新疆精河县乌兰达坂脉石英矿资源储量核实报告》矿产资源储量
- 管理学原理第六章 指挥课件
- 工序标准工时及产能计算表
- 2023年最新的马季吹牛相声台词
- 幼儿园大班数学口算练习题可打印
评论
0/150
提交评论