在构建插件式的应用程序框架(二)----订立契约一文中,可以看到我们的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/guanjinke/archive/2007/02/26/657530.html

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 2017年第六届数学中国数学建模国际赛(小美赛)C题解题思路
  2. 关于验证码整理的新版本
  3. 找某個ColumnName在那些Tables
  4. jeecg框架日常开发问题解决方法
  5. centos mysql无法登录,解决centos下MySQL登录1045问题
  6. 小米6android版本更新,小米6正式迎来了安卓9.0稳定版升级,一代神机继续创造辉煌...
  7. zabbix通过ODBC监控sybase举例
  8. ionic 图片显示在屏幕中间_iPad屏幕坏点亮点怎么看 自查iPad屏幕坏点亮点方法【详解】...
  9. java代码实现分页_Java分页实现(示例代码)
  10. Unity Shader混合模式笔记(Blend)
  11. 学习基于html和JavaScript的滑动图片拼图验证源码
  12. react-native-root-siblings 在应用的根元素之后添加兄弟元素
  13. 优麒麟配置java环境变量
  14. c语言创意程序题目,成都scratch趣味编程100例
  15. WSUS 3.0 SP2服务器配置
  16. 锁相环(PLL)基本结构及相关基本知识
  17. 听见丨HTC推国行VR一体机VIVE Focus:搭载骁龙835+AMOLED屏 Embark开始测试用无人驾驶卡车运送冰箱
  18. 推荐:几款优秀的数据挖掘工具
  19. PC傻瓜式安装黑苹果并打造成全能逆向工作站
  20. 【XR-3】小道消息 (Comet OJ - Contest #9 X Round 3 )

热门文章

  1. python变量_Python变量
  2. JavaScript中sort方法的使用及原理详解
  3. Flink状态管理和容错机制介绍
  4. Mozilla FireFox 2.0 简体中文版发布
  5. Java Web之Cookie和Session的理解
  6. 让apache支持ssl
  7. windows apache 负载均衡配置 Tomcat集群配置
  8. 支付宝微信支付回调地址访问不成功
  9. Oracle 11g RAC 修改IP
  10. 封装好的C++ md5类