在构建插件式的应用程序框架(二)----订立契约一文中,可以看到我们的IApplication接口是派生于IServiceContainer接口的。为什么要派生于IServiceContainer呢?我们来看看IServiceContainer的定义,它有几个AddService方法和RemoveService方法以及从IserviceProvider继承过来的GetService方法。Service本身是.NET设计时架构的基础,Service提供设计时对象访问某项功能的方法实现,说起来还真拗口。就我看来,ServiceContainer机制的本质就是解耦合,就是将类型的设计时功能从类型本身剥离出来。如果你把类型的设计时功能也封装到类型里,这样的类型包含了很多只有开发人员才会用到而最终用户根本不需要的功能,使得类型既臃肿有不便于扩展。而将设计时功能剥离出来,这样类型就可以不依赖于特定的设计环境,之所以现在有这么多非官方的.NET设计环境可能就是这个原因吧。
我们的插件式的应用程序框架正好也需要这样一个松散的架构,我就移花接木把它应用到我们的框架中。
ServiceContainer是.NET提供的IserviceContainer的实现,如果没有特殊的需要我们不必扩展它,而是直接的利用它。在上一篇文章中我们在实现IApplication接口的时候就直接使用的ServiceContainer。我们在使用Service架构的时候,总是倾向于有一个根容器,各个Service容器构成了一个Service容器树,每一个节点的服务都可以一直向上传递,直到根部,而每一个节点请求Service的时候,我们总是可以从根节点获得。我把这个根节点比喻成一个服务中心,它汇总了所有可提供的服务,当某个对象要请求服务(GetService)只需要向根结点发送要获得的服务,根结点就可以把服务的对象传递给它。
从另外一个角度看,ServiceContainer为我们的插件是应用程序提供了有力的支持,利用ServiceContainer,你不但可以获得应用程序所提供的所有的功能,而且你还可以通过插件向应用程序添加Service,而你添加的Service又可以服务另外的Service,这样我们的应用程序框架就更加的灵活了。但是任何东西都是有两面性的,带来灵活的同时也为开发人员的工作增加了复杂度,所以使用ServcieContianer开发的应用程序必须提供足够详细的文档,否则开发人员可能根本不知道你到底有多少Service可以用,因为很多的Service是通过插件提供的,可能应用程序的作者都不会知道程序发布以后会出现多少Service。
写了这么多,可能接触过ServiceContainer的朋友已经觉得罗唆了,没接触过的还是觉得说得莫明其妙。有空接着写,我会创建几个简单的服务演练演练,增强一下感性认识,呵呵。

转载于:https://www.cnblogs.com/chinhr/archive/2007/06/18/787408.html

构建插件式的应用程序框架(四)----服务容器(ZT)相关推荐

  1. 构建插件式的应用程序框架(四)----服务容器

    在构建插件式的应用程序框架(二)----订立契约一文中,可以看到我们的IApplication接口是派生于IServiceContainer接口的.为什么要派生于IServiceContainer呢? ...

  2. 构建插件式的应用程序框架(六)----通讯机制(ZT)

    前天发了构建插件式的应用程序框架(五)----管理插件这篇文章,有几个朋友在回复中希望了解插件之间是如何通讯的.这个系列的文章写到这里,也该谈谈这个问题了,毕竟已经有了插件管理.不知道大家有没有注意到 ...

  3. 构建插件式的应用程序框架(一)----开篇

         说起插件(plug-in)式的应用程序大家应该不陌生吧,记得很早以前有一款很流行的MP3播放软件winmap,它是我记忆里最早认识的一款使用插件模式的应用程序,你可以使用他的插件管理器插入很 ...

  4. 构建插件式的应用程序框架(八)----视图服务的简单实现(ZT)

    我在前一篇文章里提到,对于停靠工具栏或者是视图最好是不要将实例放到词典中,而是将工具栏或者视图的类型放到词典中,因为视图类型会经常的被重用,并且会经常被关闭或者再打开.当实例被关闭后,资源就被释放了, ...

  5. 用于构建集成式桌面应用程序的新指南和新工具(转载于MSDN)

    发布日期: 2006-10-30 | 更新日期: 2006-10-30 Christian Thilmany 和 Jim Keane 本文将介绍以下内容: • CAB 和 Smart Client S ...

  6. 微信小程序框架(四)-全面详解(学习总结---从入门到深化)

    目录 路由_navigateTo 页面跳转 携带参数 返回上一级页面 路由_redirectTo 页面跳转 路由_reLaunch 页面跳转 路由_switchTab 实现 tabbar 页面跳转 交 ...

  7. .net 插件式开发学习总结

    .NET简谈插件系统开发模式 今天跟大家分享一下我们在日常开发中并不常用的开发模式"插件系统模式",什么叫插件从大一点的概念讲就是我们开发的软件是由很小的模块组成,每一块都能成功的 ...

  8. 插件式架构设计实践:插件式系统架构设计简介

    本系列博文将使用微软RIA技术解决方案Silverlight以及扩展性管理框架Managed Extensibility Framework(MEF),以插件式架构设计为导线,分享本人在从事基于微软S ...

  9. springboot 前缀_springboot插件式开发框架

    springboot插件式开发框架 介绍 该框架主要是集成于springboot项目,用于开发插件式应用的集成框架. 核心功能 插件配置式插拔于springboot项目. 在springboot上可以 ...

  10. Seam - 无缝集成 JSF,第 1 部分: 为 JSF 量身定做的应用程序框架

    Seam - 无缝集成 JSF,第 1 部分: 为 JSF 量身定做的应用程序框架 发现 Seam 对 JSF 生命周期特有的增强 文档选项 未显示需要 JavaScript 的文档选项 打印本页 将 ...

最新文章

  1. HTSRealistic missions 10:Holy Word High School
  2. (0003) iOS 开发之App 适配iOS 10
  3. 在GridView中针对鼠标单击的某一独立单元格进行编辑
  4. 如何看懂源代码--(分析源代码方法)(转)
  5. poj 2482 Stars in Your Window (线段树扫描线)
  6. 从C语言的角度重构数据结构系列(五)-C语言的程序结构和基本语法
  7. Java初级学习(转载http://www.cnblogs.com/biehongli/p/5737612.html)
  8. matlab 矩阵位移法编程 结构力学,matlab 矩阵位移法编程 结构力学
  9. Python 爬虫 ——html 页面的认识
  10. msdn系统镜像下载
  11. python绘图技巧(高清图)
  12. Unmapped Spring configuration files found. Please configure Spring facet
  13. C_sharp-gives-OJ-background-test-data
  14. STM32F4单片机读取光电编码器的小理解
  15. 短期python培训机构
  16. 《支付系统-3交易系统》
  17. sap LICENSE KEY和 ACCESS KEY 破解
  18. $http与ajax的同步请求
  19. ffmpeg 去除图片中的水印
  20. 广州百田笔试+面试经历

热门文章

  1. 《算法图解》第五章 散列表 课后作业
  2. 长沙理工大学第十二届ACM大赛L 选择困难症 (剪枝暴搜)
  3. 《机器学习》瓜书—周志华
  4. Python在运维工作中的经典应用之ansible
  5. 007-JQuery 筛选
  6. struts转换器详解
  7. 给对象添加属性和给对象原型添加属性的区别
  8. LeetCode93 Restore IP Addresses
  9. 位图切割器位图裁剪器
  10. ubuntu 安装搜狗拼音输入法