WF のアクティビティ作成オプション

.NET Framework 4.6.1 には、カスタム アクティビティを作成するオプションがいくつか用意されています。 特定のアクティビティを作成するために使用する適切な方法は、実行時に必要な機能によって異なります。

カスタム アクティビティを作成するために使用する基本アクティビティ クラスの決定

次の表は、カスタム アクティビティの基本クラスに使用できる機能の一覧です。

基本アクティビティ クラス 使用できる機能
Activity システム標準アクティビティおよびカスタム アクティビティのグループを複合アクティビティに構成します。
CodeActivity オーバーライドできる Execute メソッドを提供することで、命令型機能を実装します。 また、追跡、変数、および引数へのアクセスを提供します。
NativeActivity CodeActivity のすべての機能を提供します。さらに、アクティビティの実行中止、子アクティビティの実行の取り消し、ブックマークの使用、および、アクティビティ、アクティビティのアクション、および機能のスケジュールも提供します。
DynamicActivity WF デザイナーおよび ICustomTypeDescriptor を介したランタイム機構と連携するアクティビティの構築に対応する、DOM のようなアプローチを提供します。これにより、新しい型を定義せずに新しいアクティビティを作成できるようになります。

アクティビティを使用したアクティビティの作成

Activity から派生するアクティビティは、他の既存のアクティビティをまとめることで機能を構成します。 これらのアクティビティには、既存のカスタム アクティビティと、.NET Framework 4.6.1 アクティビティ ライブラリのアクティビティを使用できます。 これらのアクティビティをまとめることは、カスタム機能を作成するための最も基本的な方法です。 このアプローチは、ワークフローを作成するうえでビジュアル デザイン環境を使用するときによく採用されます。

CodeActivity または AsyncCodeActivity を使用したアクティビティの作成

CodeActivity または AsyncCodeActivity から派生するアクティビティは、Execute メソッドをカスタムの命令型コードでオーバーライドすることで、命令型機能を実装できます。 カスタム コードが実行されるのは、アクティビティが実行時に実行されるときです。 この方法で作成されたアクティビティはカスタム機能にアクセスできますが、実行時環境へのフル アクセス、子アクティビティのスケジュール機能、ブックマークの作成、Cancel メソッドや Abort メソッドのサポートなどの、ランタイムのすべての機能にアクセスすることはできません。 CodeActivity を実行すると、(CodeActivityContext クラスまたは AsyncCodeActivityContext クラスを介して) 限定されたバージョンの実行時環境にアクセスできます。 CodeActivity を使用して作成したアクティビティは、引数と変数の解決、拡張、および追跡にアクセスできます。 非同期アクティビティのスケジュールは、AsyncCodeActivity を使用して実行できます。

NativeActivity を使用したアクティビティの作成

NativeActivity から派生するアクティビティは、CodeActivity から派生するアクティビティと同様に、Execute をオーバーライドすることで、命令型機能を作成します。ただし、NativeActivityContext メソッドに渡される Execute を介して、ワークフロー ランタイムのすべての機能にもアクセスできます。 このコンテキストは、子アクティビティのスケジュールと取り消し、ActivityAction および ActivityFunc<TResult> オブジェクトの実行、ワークフローへのトランザクションの流し込み、非同期プロセスの呼び出し、実行の取り消しと中止、実行プロパティおよび実行拡張機能へのアクセス、およびブックマーク (一時停止したワークフローの再開を処理) をサポートします。

DynamicActivity を使用したアクティビティの作成

他の 3 種類のアクティビティとは異なり、DynamicActivity から新しい型を派生することでは新しい機能は作成されません (クラスはシールされています)。その代わり、アクティビティのドキュメント オブジェクト モデル (DOM) を使用して、Properties プロパティと Implementation プロパティに機能をまとめることで、新しい機能を作成します。

結果を返すアクティビティの作成

多くのアクティビティは、実行後に結果を返します。 この目的でアクティビティにカスタムの OutArgument<T> を定義することは常に可能ですが、代わりに Activity<TResult> を使用するか、CodeActivity<TResult> または NativeActivity<TResult> から派生することをお勧めします。 これらの各基本クラスには、アクティビティの戻り値に使用できる Result という OutArgument<T> があります。 結果を返すアクティビティは、1 つの結果のみをアクティビティから返す必要がある場合にのみ使用します。複数の結果を返す必要がある場合は、別の OutArgument<T> メンバーを代わりに使用します。