DynamicActivity 는 퍼블릭 생성자가 있는 구체적이고 봉인된 클래스입니다. DynamicActivity 는 활동 DOM을 사용하여 런타임에 활동 기능을 어셈블하는 데 사용할 수 있습니다.
DynamicActivity 기능
DynamicActivity 에는 실행 속성, 인수 및 변수에 액세스할 수 있지만 자식 활동 예약 또는 추적과 같은 런타임 서비스에는 액세스할 수 없습니다.
최상위 속성은 워크플로 Argument 개체를 사용하여 설정할 수 있습니다. 명령적 코드에서 이러한 인수는 새 형식의 CLR 속성을 사용하여 만들어집니다. XAML에서는 x:Class
및 x:Member
태그를 사용하여 선언됩니다.
DynamicActivity 인터페이스를 사용하여 ICustomTypeDescriptor디자이너와 함께 생성된 활동 디자이너에서 만든 활동은 다음 절차에서 설명한 대로 Load을(를) 동적으로 로드할 수 있습니다.
명령적 코드를 사용하여 런타임에 활동을 만들려면
OpenVisual Studio 2010.
파일, 새로 만들기, 프로젝트를 선택합니다. 프로젝트 형식 창의 Visual C#에서 워크플로 4.0을 선택하고 v2010 노드를 선택합니다. 템플릿 창에서 순차 워크플로 콘솔 애플리케이션을 선택합니다. 새 프로젝트 DynamicActivitySample의 이름을 지정합니다.
HelloActivity 프로젝트에서 Workflow1.xaml을 마우스 오른쪽 단추로 클릭하고 삭제를 선택합니다.
Program.cs를 엽니다. 파일 맨 위에 다음 지시문을 추가합니다.
using System.Collections.Generic;
메서드의
Main
내용을 다음 코드로 바꿉니다. 이 코드는 단일 Sequence 활동을 포함하는 활동을 만들고 WriteLine 새 동적 활동의 속성에 Implementation 할당합니다.//Define the input argument for the activity var textOut = new InArgument<string>(); //Create the activity, property, and implementation Activity dynamicWorkflow = new DynamicActivity() { Properties = { new DynamicActivityProperty { Name = "Text", Type = typeof(InArgument<String>), Value = textOut } }, Implementation = () => new Sequence() { Activities = { new WriteLine() { Text = new InArgument<string>(env => textOut.Get(env)) } } } }; //Execute the activity with a parameter dictionary WorkflowInvoker.Invoke(dynamicWorkflow, new Dictionary<string, object> { { "Text", "Hello World!" } }); Console.ReadLine();
애플리케이션을 실행합니다. "Hello World!" 텍스트가 있는 콘솔 창이 표시됩니다.
XAML을 사용하여 런타임에 활동을 만들려면
Visual Studio 2010을 엽니다.
파일, 새로 만들기, 프로젝트를 선택합니다. 프로젝트 형식 창의 Visual C#에서 워크플로 4.0을 선택하고 v2010 노드를 선택합니다. 템플릿 창에서 워크플로 콘솔 애플리케이션을 선택합니다. 새 프로젝트 DynamicActivitySample의 이름을 지정합니다.
HelloActivity 프로젝트에서 Workflow1.xaml을 엽니다. 디자이너 아래쪽의 인수 옵션을 클릭합니다. 새로운
In
형식의TextToWrite
인수를String
로 만듭니다.도구 상자의 기본 형식 섹션에서 디자이너 화면으로 WriteLine 작업을 끌어옵니다. 활동의
TextToWrite
속성에 값을 할당합니다.Program.cs를 엽니다. 파일 맨 위에 다음 지시문을 추가합니다.
using System.Activities.XamlIntegration;
메서드의
Main
내용을 다음 코드로 바꿉니다.Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml"); results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } }); Console.ReadLine();
애플리케이션을 실행합니다. "Hello World!" 텍스트가 있는 콘솔 창이 나타납니다.
솔루션 탐색기에서 Workflow1.xaml 파일을 마우스 오른쪽 단추로 클릭하고 코드 보기를 선택합니다. 활동 클래스는
x:Class
로 생성되고, 속성은x:Property
로 생성됩니다.
참고하십시오
.NET