鬆散結合的事件
由 COM+ 所提供的鬆散結合的事件模型可支援晚期繫結的事件或發行者和訂閱者與事件系統之間的方法呼叫。事件系統並不會重複輪詢伺服器,而是將有用的資訊通知相關單位。
若要使用這項服務,事件類別和事件接收 (Event Sink) 必須直接或間接從 System.EnterpriseServices.ServicedComponent 類別衍生而來。
注意 若要在事件接收和事件類別之間建立永續性或暫時性 (Transient) 訂閱,請使用 COM+ 管理物件和指令碼或 Managed 程式碼。您也可以從 Windows 控制台使用元件服務管理工具,建立暫時性 (Transient) 訂閱。
下列範例會建立事件介面、ILceMsg
、事件類別、事件接收 (Event Sink) 和發行者。事件類別和事件接收都是從 ILceMsg
介面衍生而來。
事件
Imports System
Imports System.IO
Imports System.Reflection
Imports System.EnterpriseServices
Imports System.Runtime.InteropServices
<assembly: ApplicationName("EventDemo")>
<assembly: ApplicationActivation(ActivationOption.Library)>
<assembly: AssemblyKeyFile("EventDemoSvr.snk")>
Namespace EventDemo
Public Interface ILceMsg
Sub EventMethod(message As String)
End Interface
<EventClass()> _
Public Class LceClass
Inherits ServicedComponent Implements ILceMsg
Public Sub EventMethod(message As String) implements _
ILceMsg.EventMethod
End Sub
End Class
Public Class LceSink
Inherits ServicedComponent Implements ILceMsg
Public Sub EventMethod(message As String) implements _
ILceMsg.EventMethod
MessageBox.Show(message, "Event sink")
End Sub
End Class
End Namespace
[C#]
using System;
using System.IO;
using System.Reflection;
using System.EnterpriseServices;
using System.Runtime.InteropServices;
[assembly: ApplicationName("EventDemo")]
[assembly: ApplicationActivation(ActivationOption.Library)]
[assembly: AssemblyKeyFile("EventDemoSvr.snk")]
namespace EventDemo
{
public interface ILceMsg
{
void EventMethod(string message);
}
[EventClass]
public class LceClass : ServicedComponent, ILceMsg
{
public void EventMethod(string message){}
}
public class LceSink : ServicedComponent, ILceMsg
{
public void EventMethod(string message)
{
MessageBox.Show(message, "Event sink");
}
}
}
發行者
Protected Sub Fire_Click(sender As Object, e As System.EventArgs)_
Handles fireEvent.Click
Dim evt As ILceMsg = CType(New LceClass(), ILceMsg)
evt.EventMethod("Hello events")
End Sub
[C#]
protected void Fire_Click (object sender, System.EventArgs e)
{
ILceMsg evt = (ILceMsg) new LceClass();
evt.EventMethod("Hello events");
}