2004-5-18+ asp.net组件服务初步
组件(Component Service)服务指的是.net框架提供的基于组件的api,用于在.net中实现组件。
在软件开发中,组件通常指的是可执行特定任务或功能的程序、类或对象,对调用或使用它的程序或其运行环境一无所知。基本上,组件是系统中独立的一部分,它仅仅依靠自身就可以完成特定的任务。
组件是编译后的代码,独立于创建它们的语言。组件还有一个预定义的接口,用于访问和操纵其内部的功能。从理论上讲,这提供了在不同语言中使用组件的功能-因为组件易于被打包或发布。
从技术上讲,组件是被编译为独立实体的类或类集合,其他程序开发人员无须了解组件的内部机制,便可以使用-不需要重新创建类的功能,也不需要使用创建组件时使用的语言。
看完上面这一大片文字,作为菜鸟的你是不是有些晕了,呵呵,其实我刚看的时候也是晕的,不过在自己实践了后再回过来看这些文字,便很好理解了。
还记得前一段时间写的那个用于分页的类吗?(参看本专题第13篇文章)我们在用的时候其实也是很麻烦,因为每次都要在codebehind里把这个类贴进去,这明显的降低了代码的可读性,如果可以像使用fcl(.net框架类库)里的其他对象一样使用它就方便多了!实际上这个想法是完全可行的,而使用的方法就是.net的组件服务。
具体的做法是把这个类写在一个单独的.cs文件里,当然要定义好命名空间,然后将其编译为一个.dll程序集文件(这个内容可以参看本专题第14篇文章),最后把这个.dll文件放到根目录的bin文件夹里就大功告成了!在创建一个新的分页的aspx页面的时候需要像使用fcl里的其他对象一样将自己写的这个类的命名空间导入,然后就可以方便的使用了!
<%@import namespace="System.Data"%>
<%@import namespace="System.Data.OleDb"%>
<!--导入自己定义的命名空间-->
<%@import namespace="Notus"%>
<script language="c#" runat="server">
//声明一个PagingMachine对象实例,就像声明其他的fcl中的类一样
PagingMachine pm;
private string connstr;
private string sql;
private void Page_Load(object sender,EventArgs e){
if(!Page.IsPostBack){
set();
}
}
private void set(){
//使用它
connstr=ConfigurationSettings.AppSettings["color"];
sql="select * from cb0102";
pm=new PagingMachine(sql,connstr);
pm.PageSize=6;
if(Request["page"]!=null)
pm.AbsolutePage=Int32.Parse(Request["page"]);
else
pm.AbsolutePage=1;
pm.DoPaging();
rep1.DataSource=pm.GetAbsoluteTable();
rep1.DataBind();
lb1.Text=pm.GetPageLinkText("page");
}
</script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>使用组件</title>
</head>
<body>
<asp:Repeater id="rep1" runat="server">
<itemtemplate>
<%#DataBinder.Eval(Container.DataItem,"id")%>
<%#DataBinder.Eval(Container.DataItem,"name")%><br>
</itemtemplate>
</asp:Repeater>
<asp:Label id="lb1" runat="server"></asp:Label>
</body>
</html>
看,这就是全部的程序代码,全部只用了42行!注意看红色的部分代码,应该不难看出其中的奥秘。这就是所谓的.net的组件服务带来的便利了。其中我们编译的.dll文件被称为标准.net组件,其中封装了我们写的分页程序的类,命名空间为Notus。
回过头来在看文章一开始的关于组件的介绍性文字,是不是很容易就理解了呢。
最后付上我自己编译的这个分页组件的下载,大家可以先实验一下,只要把这个东西下下来,然后放到根目录下的bin文件夹,就可以使用啦~~