10.2.1 创建Web Part提供程序
首先看看创建给其他Web Part发送数据的Web Part提供程序的过程。创建可以为另一个Web Part提供数据的Web Part,需要三步。
(1) 定义一个接口,指定在Web Part之间传送什么数据。
(2) 提供数据的Web Part要执行这个接口,包括编写接口中方法和属性的代码。
(3) 编写例程。处理提供程序中的连接。
1. 定义接口
对于要和其他Web Part通信的Web Part,必须执行一个可以传送数据的接口。在这个接口中,应指定执行该接口的对象必须支持的方法和属性。首先看看最简单的接口,其中只有一个属性,返回一个字符串。在Visual Basic 2005中,把接口定义在接口结构中。
Public Interface IBookInfo
Property ISBN() As String
End Interface
C#的对应代码如下所示。
public interface IBookInfo:
{
string ISBN
{
get;
set;
}
}
提示:
在声明接口中的属性时,不应为属性指定实际的代码体。接口只指定必须包含的属性和方法,但不指定代码——负责实现Web Part的代码,添加到接口中的方法也是这样,如本章后面所述。
可以在类外部的任一模块中定义接口。但最好在一个与接口同名的独立文件中定义接口。这样,接口可以在Solution Explorer中看到,便于将接口的管理与在源代码管理工具中管理代码相分离,另外,只要复制接口文件,就可以在项目之间复制接口。但如果要在项目之间共享接口,最好将接口文件放在一个独立的项目中,将它编译为一个DLL。之后,使用该接口的其他项目就只需添加对该DLL的引用。
在Visual Studio .NET中,要把新的接口文件添加到项目中,可以选择Project | Add New Item命令,在Add New Item对话框中,从列表中选择Interface,输入接口的名称,单击Add按钮。
提示:
接口的名称一般以字母I开头,例如IBookInfo。
2. 执行接口
下一步是修改Web Part,通过该接口提供数据。首先让Web Part执行刚才定义的接口。在Visual Basic 2005中,在类定义和Inherits语句的后面,给接口名称添加Implements关键字,就表示希望类执行一个接口。
Public Class ProviderPart
Inherits System.Web.UI.WebControls.WebControl
Implements IBookInfo
在C#中,把接口的名称添加到类定义的最后,之前加一个逗号,如下面的代码所示。
public class ProviderPart : System.Web.UI.WebControls.WebControl, IBookInfo
指定了要在Web Part中执行的接口后,就必须创建接口中指定的所有属性或方法(对于IBookInfo接口,只有一个属性)。在Visual Basic 2005中,可以给实现接口的例程指定任意名称,但约定是,例程的名称应与接口相同。执行接口的例程与以前编写的例程有两个区别。
● 执行接口的例程必须使用Implements关键字,把例程与接口中的方法或属性关联起来。
● 执行接口的例程必须与所关联的接口中的例程有相同的签名。例如,如果接口中的例程是一个属性,它没有参数,返回一个整数,则执行接口的例程也必须有一个不带参数、返回一个整数的属性。
提示:
方法或属性的定义(数据类型、属性的个数、属性是只读还是只写)称为方法或属性的签名。接口包含一系列方法和属性签名,但没有实际的代码—— 即没有执行代码。Web Part中的方法或属性有实际执行接口签名的代码。为了使Web Part中的方法或属性能工作,其签名必须匹配接口中的方法和属性执行的签名。在C#中,方法或属性名是签名的一部分。而在Visual Basic 2005中,方法或属性名不是签名的一部分,所以可以给方法和属性指定任意名称。
在下面的Visual Basic 2005示例中,创建了一个BookIdentifier例程,它关联到IBookInfo接口的ISBN属性上。与ISBN属性一样,BookIdentifier例程是一个没有参数、返回一个字符串的属性。
Property BookIdentifier() As String Implements IBookInfo.ISBN
Get
Return myData
End Get
Set (Value As String)
myData = Value
End Set
End Property
在C#中,不能给接口例程指定别名,但例程名必须包含接口名和例程名,中间用一个句点分开。
public class ProviderPart : WebControl, IBookInfo
{
string IBookInfo.ISBN
{
get
{
return MyData;
}
set
{
MyData = value;
}
}
3. 创建连接点
最后,需要为接口提供一个连接点方法。连接点方法是一个函数,它给Web Part提供程序返回一个引用。该函数的返回值是该提供程序的接口执行代码。
可以给这个方法指定任意名称,但为了说明这个方法是一个连接点,需要在例程中添加ConnectionProvider特性。必须给ConnectionProvider传送一个显示名称(这是在ConnectionsZone用户界面上使用的名称)。下面的Visual Basic 2005示例显示了IBookInfo接口的连接点。
<WebControls.WebParts.WebParts.ConnectionProvider("Provides ISBN", _
"ISBNProvider")> Public Function IBookInfoProvider() As IBookInfo
Return Me
End Function
C#的对应代码如下所示。
[WebControls.WebParts.ConnectionProvider("Provides ISBN")]
public IBookInfo IBookInfoProvider()
{
return this;
}
提示:
连接例程的命名约定是,使用接口名,其后加上Provider。
用一些业务逻辑编写与ISBN属性相关联的例程后,就有了一个给Web Part提供数据的Web Part。现在,需要创建一个Web Part使用程序,通过接口从Web Part提供程序中获取数据。






