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 является неопределенной ссылкой (Nothing в Visual Basic).

Объект WorkflowRuntime уже удален.

Обнаружено больше одной службы типа 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 уже удален.

Обнаружено больше одной службы универсального типа.

Примеры

В следующем примере демонстрируется извлечение одной службы из объекта 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 возможно формирование исключения.

Применяется к