過去に IActivityTemplateFactory を扱った時は、アクティビティの自動生成と変数の生成まででした。今回はそこから一歩進んで、生成した変数を自動生成したアクティビティで利用するようにしてみます。
これも面倒な事は後にしてソースから。
1: Public Function Create(target As DependencyObject) As Activity Implements IActivityTemplateFactory.Create
2: Dim container As New Sequence
3:
4: Dim cookie As New Variable(Of CookieContainer)("__cookieContainer") With {
5: .Default = New VisualBasicValue(Of CookieContainer)("New System.Net.CookieContainer")}
6: container.Variables.Add(cookie)
7:
8: Dim childActivity As New WebGetActivity With {
9: .CookieContainer = New VisualBasicReference(Of CookieContainer)("__cookieContainer")}
10:
11: container.Activities.Add(childActivity)
12: Return container
13: End Function
IActivityTemplateFactory を継承したクラスのロジックです。 ローカル変数 container に作成するのが、大元のコンテナとなる Sequence アクティビティです。今回はその子供として、WebGetActivity という自作アクティビティを追加、同時に __cookieContainer という名前の変数を設定し、初期値として CookieContainer クラスのインスタンスが設定されるようにしています。
この変数を設定したいプロパティが WebGetActivity アクティビティに用意した CookieContainer プロパティでこれは InOutArgument としてあります。InOutArgument なプロパティに割り振る場合には、VisualBasicValue は利用できず VisualBasicReference を利用して値を設定します。
実際に利用するとこのように動作します。コンテナとなる IActivityTemplateFactory をツールボックスからドラッグドロップすると、デザイナ上に親 Sequence と子 WebGetActivity が一度に作成され、変数に CookieContainer なものが自動で追加されています。
そしてその子 WebGetActivity のプロパティには、自動作成した変数を利用するようになっているのがわかると思います。
このように自動で色々と設定を行う事で、使う側にとって手間が少ない、より良いアクティビティが作成できるのではないでしょうか。
0 件のコメント:
コメントを投稿