WorkflowRuntime.GetService 方法

定义

重载

GetService(Type)

从工作流运行时引擎中检索指定的 Type 的服务。

GetService<T>()

从工作流运行时引擎中检索指定泛型类型的服务。

GetService(Type)

从工作流运行时引擎中检索指定的 Type 的服务。

public:
 virtual System::Object ^ GetService(Type ^ serviceType);
public object GetService (Type serviceType);
abstract member GetService : Type -> obj
override this.GetService : Type -> obj
Public Function GetService (serviceType As Type) As Object

参数

serviceType
Type

要检索的服务的 Type

返回

Object

指定的 Type 的服务。

实现

例外

serviceType 为空引用(在 Visual Basic 中为 Nothing)。

已找到多个 serviceType 类型的服务。

注解

如果存在多个指定的 GetService 的服务,则 InvalidOperationException 将引发 Type。 因此,如果 GetAllServices 中出现多个指定类型的服务,您应使用 WorkflowRuntime 的重载方法之一。 例如,工作流运行时引擎可能有多个跟踪服务。 如果通过指定 TrackingService 基类来请求跟踪服务,则可能会引发异常。

适用于

GetService<T>()

从工作流运行时引擎中检索指定泛型类型的服务。

public:
generic <typename T>
 T GetService();
public T GetService<T> ();
member this.GetService : unit -> 'T
Public Function GetService(Of T) () As T

类型参数

T

服务类型。

返回

T

指定泛型类型的单个服务。

例外

已找到多个该泛型类型的服务。

示例

下面的示例演示如何从 WorkflowRuntime 对象中检索单个服务;在本例中是 ManualWorkflowSchedulerService 类型的服务。 此示例来自 工作流线程处理示例

protected override CompositeActivity OnCreateNewBranch()
{
    return new ParallelIfBranch();
}

private void OnAddBranch(object sender, EventArgs e)
{
    CompositeActivity activity1 = this.OnCreateNewBranch();
    CompositeActivity activity2 = base.Activity as CompositeActivity;

    if ((activity2 != null) && (activity1 != null))
    {
        int num1 = this.ContainedDesigners.Count;
        Activity[] activityArray1 = new Activity[] { activity1 };

        if (CanInsertActivities(new ConnectorHitTestInfo(this, HitTestLocations.Designer, activity2.Activities.Count),
            new List<Activity>(activityArray1).AsReadOnly()))
        {
            CompositeActivityDesigner.InsertActivities(this,
                new ConnectorHitTestInfo(this, HitTestLocations.Designer, activity2.Activities.Count),
                new List<Activity>(activityArray1).AsReadOnly(),
                string.Format("Adding branch {0}", activity1.GetType().Name));

            if ((this.ContainedDesigners.Count > num1) && (this.ContainedDesigners.Count > 0))
            {
                this.ContainedDesigners[this.ContainedDesigners.Count - 1].EnsureVisible();
            }
        }
    }
}
Protected Overrides Function OnCreateNewBranch() As CompositeActivity
    Return New ParallelIfBranch()
End Function

Private Sub OnAddBranch(ByVal sender As Object, ByVal e As EventArgs)
    Dim activity1 As CompositeActivity = Me.OnCreateNewBranch()
    Dim activity2 As CompositeActivity = CType(MyBase.Activity, CompositeActivity)

    If (activity2 IsNot Nothing) And (activity1 IsNot Nothing) Then

        Dim num1 As Integer = Me.ContainedDesigners.Count
        Dim activityArray1() As Activity = {activity1}

        If (CanInsertActivities(New ConnectorHitTestInfo(Me, HitTestLocations.Designer, activity2.Activities.Count), _
            New List(Of Activity)(activityArray1).AsReadOnly())) Then

            CompositeActivityDesigner.InsertActivities(Me, _
                New ConnectorHitTestInfo(Me, HitTestLocations.Designer, activity2.Activities.Count), _
                New List(Of Activity)(activityArray1).AsReadOnly(), _
                String.Format("Adding branch 0}", activity1.GetType().Name))

            If (Me.ContainedDesigners.Count > num1) And (Me.ContainedDesigners.Count > 0) Then
                Me.ContainedDesigners(Me.ContainedDesigners.Count - 1).EnsureVisible()
            End If
        End If
    End If
End Sub

注解

如果存在多个指定泛型类型的服务,则 GetService 将引发 InvalidOperationException。 因此,如果 GetAllServices 中出现多个该泛型类型的服务,您应使用 WorkflowRuntime 的重载方法之一。 例如,工作流运行时引擎可能有多个跟踪服务。 如果通过指定 TrackingService 基类来请求跟踪服务,则可能会引发异常。

适用于