WorkflowRuntime.GetService 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
오버로드
| 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
매개 변수
반환
지정된 Type의 서비스입니다.
구현
예외
serviceType이 null 참조(Visual Basic의 경우 Nothing)인 경우
WorkflowRuntime이 이미 삭제된 경우
serviceType 형식의 서비스가 여러 개 있는 경우
설명
지정된 GetService에 대한 서비스가 여러 개 있으면 InvalidOperationException에서 Type을 throw합니다. 따라서 GetAllServices에 지정된 형식의 서비스가 여러 개 있을 수 있는 경우 WorkflowRuntime의 오버로드된 메서드 중 하나를 사용해야 합니다. 예를 들어 워크플로 런타임 엔진에는 여러 개의 추적 서비스가 있을 수 있습니다. TrackingService 기본 클래스를 지정하여 추적 서비스를 요청하면 예외가 throw될 수 있습니다.
적용 대상
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
서비스 형식입니다.
반환
지정된 제네릭 형식의 단일 서비스입니다.
예외
WorkflowRuntime이 이미 삭제된 경우
제네릭 형식의 서비스가 여러 개 있는 경우
예제
다음 예제에서는 WorkflowRuntime 개체에서 단일 서비스, 이 경우 ManualWorkflowSchedulerService 유형의 서비스를 검색하는 방법을 보여 줍니다. 이 예제에서는 합니다 Workflow Threading 샘플합니다.
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을 throw합니다. 따라서 GetAllServices에 해당 제네릭 형식의 서비스가 여러 개 있을 수 있는 경우 WorkflowRuntime의 오버로드된 메서드 중 하나를 사용해야 합니다. 예를 들어 워크플로 런타임 엔진에는 여러 개의 추적 서비스가 있을 수 있습니다. TrackingService 기본 클래스를 지정하여 추적 서비스를 요청하면 예외가 throw될 수 있습니다.