方法 :疎結合イベントを実装する

コード例

次の手順と例では、共通のイベント インターフェイスを実装するイベント クラスとイベント シンク、およびイベントを発生させる発行者について説明します。COM+ の疎結合イベント モデル使用の詳細については、「疎結合イベント」を参照してください。

疎結合イベントを実装するには

  1. イベント インターフェイスを定義します。たとえば、次のコードは、EventMethod という名前のメソッドを持つ IlceMsg という名前のイベント インターフェイスを定義します。

    Public Interface ILceMsg
        Sub EventMethod(message As String)
    End Interface
    
    public interface ILceMsg
    {
        void EventMethod(string message);
    }
    
  2. System.EnterpriseServices.ServicedComponent クラスから派生するイベント クラスを定義し、手順 1 で定義したイベント インターフェイスを実装します。たとえば、次のコードでは、LceClass という名前のイベント クラスを定義します。

    <EventClass()> _
    Public Class LceClass 
    Inherits ServicedComponent Implements ILceMsg 
        Public Sub EventMethod(message As String) implements _
            ILceMsg.EventMethod
        End Sub 
    End Class
    
    [EventClass]
    public class LceClass : ServicedComponent, ILceMsg
    {
        public void EventMethod(string message){}
    }
    
  3. System.EnterpriseServices.ServicedComponent クラスから派生するイベント シンク クラスを定義し、手順 1 で定義したイベント インターフェイスを実装します。たとえば、次のコードでは、LceSink という名前のイベント シンク クラスを定義します。

    <EventClass()> _
    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
    
    public class LceSink : ServicedComponent, ILceMsg
    {
        public void EventMethod(string message)
        {
            MessageBox.Show(message, "Event sink");
        }
    }
    
  4. LCE を発生させるイベント発行者を作成します。

    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 
    
    protected void Fire_Click (object sender, System.EventArgs e)
    {
          ILceMsg evt = (ILceMsg) new LceClass();
          evt.EventMethod("Hello events");
    }
    

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 
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");
        }
    }
}
Publisher
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 
//Publisher
protected void Fire_Click (object sender, System.EventArgs e)
{
      ILceMsg evt = (ILceMsg) new LceClass();
      evt.EventMethod("Hello events");
}

関連項目

参照

System.EnterpriseServices Namespace

概念

疎結合イベント
利用可能な COM+ サービスの概要

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.