包建强的开源地带
我的微软梦,实现了一半
博客园
社区
首页
新随笔
联系
管理
订阅
随笔- 325 文章- 3 评论- 1088
Service:服务层分析 总纲
Service在SharpDevelop中的用途:
需要一些静态辅助类,协助主流程完成一些额外扩展的细小琐碎的功能,例如OpenFile功能,例如获取编译器输出位置。原先SharpDevelop使用只含静态成员的类,但是后来发现需要定义多于10个以上的静态类,不易维护;而且难以替换,难以扩展。现在0.92版本使用ServiceManager单件访问这些辅助功能。
Service的结构在Core/Service中:
1.IService接口:
注意,SharpDevelop在InitializeService()方法中进行初始化,而不是在构造函数中。这是因为有些服务在初始化之前就其作用了,所以先加载Core后加载Base,而且在各自的Initialize()方法中要判断IsInitialized才可以执行
2.AbstractService,为IService的抽象实现,略过。
3.ServiceManager单件:
仔细地看GetService()方法,发现这是一个注册工厂。
public
IService GetService(Type serviceType)
{
IService s
=
(IService)servicesHashtable[serviceType];
if
(s
!=
null
)
{
return
s;
}
foreach
(IService service
in
serviceList)
{
if
(serviceType.IsInstanceOfType(service))
{
servicesHashtable[serviceType]
=
service;
return
service;
}
}
return
null
;
}
这里,服务并行存储于ArrayList和HashTable。执行GetService()方法时,先在HashTable中查找,如果找不到再去ArrayList中查找,找到了在返回值之前同时插入HashTable,这样就提高了查询速度。
注意,HashTable只在这个方法里面使用。
InitializeServicesSubsystem()方法用于Main()函数中,用于添加4个Core服务以及11个Base服务,同时对每个服务初始化(调用IService的InitializeService()方法)。
UnloadAllServices()方法也用于Main()函数中,用于卸载所有服务(调用IService的UnloadService()方法)。
Core中的Service有4个
1.File:FileUtilityService.cs
用于通用文件操作,并提供文件图标操作。
2.Property
访问SharpDevelop全局属性的服务。
3.Resource
本地化管理器。
4.StringParser
在字符串中定义属性的服务。
Base中的Service定义在SharpDevelop.Addin中:32-55行,共计11个, 注意,path为
"
/Workspace/Services
"
<
Extension path
=
"
/Workspace/Services
"
>
<
Class id
=
"
ProjectService
"
class
=
"
ICSharpCode.SharpDevelop.Services.DefaultProjectService
"
/>
<
Class id
=
"
FileService
"
class
=
"
ICSharpCode.SharpDevelop.Services.DefaultFileService
"
/>
<
Class id
=
"
ParserService
"
class
=
"
ICSharpCode.SharpDevelop.Services.DefaultParserService
"
/>
<
Class id
=
"
TaskService
"
class
=
"
ICSharpCode.SharpDevelop.Services.TaskService
"
/>
<
Class id
=
"
StatusBarService
"
class
=
"
ICSharpCode.SharpDevelop.Services.DefaultStatusBarService
"
/>
<
Class id
=
"
ToolbarService
"
class
=
"
ICSharpCode.SharpDevelop.Services.ToolbarService
"
/>
<
Class id
=
"
LanguageService
"
class
=
"
ICSharpCode.SharpDevelop.Services.LanguageService
"
/>
<
Class id
=
"
ClassBrowserIconsService
"
class
=
"
ICSharpCode.SharpDevelop.Services.ClassBrowserIconsService
"
/>
<
Class id
=
"
LanguageBindingService
"
class
=
"
ICSharpCode.SharpDevelop.Services.LanguageBindingService
"
/>
<
Class id
=
"
DisplayBindingService
"
class
=
"
ICSharpCode.SharpDevelop.Services.DisplayBindingService
"
/>
<
Class id
=
"
AmbienceService
"
class
=
"
ICSharpCode.SharpDevelop.Services.AmbienceService
"
/>
</
Extension
>
Base中的每个Service都相应的有一个接口和一个抽象类。
接下来,分析所有的15个服务。
posted @ 2007-07-24 23:20
包建强
阅读(205)
评论(0)
编辑
收藏
所属分类:
SharpDevelop 0.92
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-07-25 22:23 编辑过
相关文章:
ASP.NET 2.0数据教程之二:创建一个业务逻辑层
ASP.NET 2.0数据教程之一:创建一个数据访问层
Microsoft .NET Pet Shop 4 架构与技术分析
把Membership,Role包装为WCF服务
gmail出问题了,登陆进去了是乱码......
gmail出问题了,登陆进去了是乱码......
用的SharpDevelop2,有个问题请教
我对Debug的一点心得
相关链接:
所属分类的其他文章:
SharpDevelop研究日记 第二轮第7天
SharpDevelop研究 目录
决定#Develop为主攻方向
# Develop change list
SharpDevelop 属性服务
SharpDevelop 属性结构分析
Service:服务层分析 总纲
AddIn插件体系
从分析Main函数开始
SharpDevelop插件图
最新IT新闻:
Facebook推出新版登录页
阿里巴巴将重新进军韩国 01年曾因发展不力撤出
美股暴跌 中国概念股周一全线大跌
美股暴跌重挫科技股:谁将挺过寒冬
百度多元化背后面临的困惑
公告
姓名:包建强
位置:中国 上海
学历:复旦大学数学系 本科
工作:某外企医疗研发中心 软件工程师
MSN:bjq_ren@hotmail.com
MVP:2008.7——2009.7
MVP配置
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的文章
我的参与
最新评论
我的标签
我管理的小组
读书(Books)
博客园精华集出版小组
写书译书小组
随笔分类
.NET C#(6)
(rss)
.NET CLR(25)
(rss)
.NET MSIL(39)
(rss)
.NET Reflection(6)
(rss)
.NET Serializable(6)
(rss)
.NET好书逐个评(3)
(rss)
AJAX(3)
(rss)
ASP.NET 2.0(14)
(rss)
Data Structures(2)
(rss)
Design Patterns(29)
(rss)
Open SourceCode(4)
(rss)
Others(53)
(rss)
SharpDevelop 0.92(11)
(rss)
SQLServer研究(3)
(rss)
WCF(2)
(rss)
WF(5)
(rss)
WPF(106)
(rss)
包包版网络棋牌大厅(10)
(rss)
包包点评
(rss)
博客园精花集(21)
(rss)
随笔档案
2008年10月 (1)
2008年9月 (17)
2008年8月 (14)
2008年7月 (28)
2008年6月 (11)
2008年5月 (15)
2008年4月 (58)
2008年3月 (26)
2008年2月 (8)
2008年1月 (1)
2007年10月 (31)
2007年9月 (30)
2007年8月 (9)
2007年7月 (7)
2007年5月 (3)
2007年4月 (36)
2007年3月 (20)
2006年11月 (4)
最新随笔
1. 微软10月份mvp名单发布,祝贺博客园中当选的兄弟们!
2. 《博客园精华集---软件工程分册》第三轮筛选结果
3. 《博客园精华集》五项联合声明
4. 推荐一本SQL经典书籍
5. 很多头绪,有点乱,理清一下
6. 发布塔罗牌21张
7. (翻译)《Expert .NET 2.0 IL Assembler》 第八章 基本类型和签名(二)
8. (翻译)《Expert .NET 2.0 IL Assembler》 第八章 基本类型和签名(三)
9. (翻译)《Expert .NET 2.0 IL Assembler》 第八章 基本类型和签名(一)
10. 准备升级包包版游戏大厅
积分与排名
积分 - 175730
排名 - 202
最新评论
1. re: 微软10月份mvp名单发布,祝贺博客园中当选的兄弟们!
什么时候我也上上榜
(cn.net.entlib)
2. re: 微软10月份mvp名单发布,祝贺博客园中当选的兄弟们!
还没收到微软的确认邮件,不过谢谢老包第一时间通知大家啊 (Justin)
3. re: 微软10月份mvp名单发布,祝贺博客园中当选的兄弟们!
太诡异了., 刚刚的评论居然消失了~ (Ψιζσεα.)
4. re: 微软10月份mvp名单发布,祝贺博客园中当选的兄弟们!
不知道拿了能干啥 (不知道拿了能干啥)
5. re: 微软10月份mvp名单发布,祝贺博客园中当选的兄弟们!
:) (TerryLee)
6. re: 《Programming WPF》翻译 第4章 3.绑定到数据列表
BindingOperations.GetDefaultView这个类已经用CollectionViewSource了 (江湖飘)
7. re: 《Programming WPF》翻译 第4章 2.数据绑定
@江湖飘
关于WPF的数据绑定技术,我写的比他详细,参见此文:
(包建强)
8. re: 《Programming WPF》翻译 第4章 2.数据绑定
@ 江湖飘
这本书已经出了第2版,语法没有过时的,建议你读新版的吧! (包建强)
9. re: 《Programming WPF》翻译 第4章 2.数据绑定
总算看望可以安心的睡觉了,这本书上的例子都没有应用程序集的说明的,这个Foreground属性是在System.Windows.Media中的,然后我把System.Drawing的引用加进来了,一直... (江湖飘)
10. re: 《Programming WPF》翻译 第4章 2.数据绑定
这本书我实在是不想读了,有太多的东西都已经不能在用了,没办法,这本是我以前读过一点,比其他的书要了解一些。<?Mapping XmlNamespace="local" Clr... (江湖飘)