随笔 - 44  文章 - 0 评论 - 304 trackbacks - 88
<2007年2月>
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910

本博客上的所有文章如非特别说明均为原创,如果要转载请注明文章出处。

与我联系

搜索

 

常用链接

留言簿(20)

我参加的小组

我参与的团队

随笔分类(40)

随笔档案(44)

文章分类

联系我

友情链接

积分与排名

  • 积分 - 173423
  • 排名 - 207

最新评论

阅读排行榜

评论排行榜

      在构建插件式的应用程序框架()----订立契约一文中,可以看到我们的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的朋友已经觉得罗唆了,没接触过的还是觉得说得莫明其妙。有空接着写,我会创建几个简单的服务演练演练,增强一下感性认识,呵呵。

posted on 2007-02-26 22:31 纶巾客 阅读(8406) 评论(10)  编辑 收藏 所属分类: .Net Framework

FeedBack:
#1楼  2007-02-26 22:41 JesseZhao      
哥们现在是越来越高产了
文章写的好快啊
支持以下
  回复  引用  查看    
#2楼 [楼主] 2007-02-26 22:49 纶巾客      
@JesseZhao
多谢支持。
  回复  引用  查看    
#3楼  2007-02-27 10:21 lyb      
关注插件式开发.

感觉应该写的具体一点.
  回复  引用  查看    
#4楼  2007-02-27 11:24 Leepy      
期待下文,不是很了解!
  回复  引用  查看    
#5楼  2007-02-27 14:21 天才書生      
ServiceContainer在接触了.NET的设计器编程的时候有了解过,不过不是了解很多

很是希望大哥能写详细点,呵呵
  回复  引用  查看    
#6楼  2007-02-27 18:28 极地银狐.NET      
支持,还望详解:)
  回复  引用  查看    
#7楼  2007-02-27 19:51 Bill.Gates [未注册用户]
好快啊,刚刚下班打开电脑就发现又更新了,
真是好文,决定把贵博客设置为主页了,每天下班后学习,
感谢作者把这么好的文章分享,
继续期待下文
  回复  引用    
#8楼  2007-03-09 19:19 Bill.Gates [未注册用户]
楼主很忙吧,有空继续写写插件机制的一些实现,
现在我在做一个项目正要使用插件,希望能从这里学习到一些然后应用到项目上去
  回复  引用    
#9楼  2007-04-15 22:40 Anthan      
个人感觉博主是在写插件式开发的整体思想,具体的实现还要我们自己去研究啊对吧,这样也好啊,授人以鱼,不如授人以渔
ps:楼上的名字吓了我一条,呵呵
  回复  引用  查看    
#10楼  2007-11-02 17:54 lg [未注册用户]
大哥,文章很不错啊,
  回复  引用    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: