В то время как подход с дополнительной переменной работает, «официальный» способ планирования дочернего элемента с некоторыми входными данными - использование в ActivityAcytion или, если вы также хотите получить результат с помощью ActivityFunc.
Боюсь, код на самом деле не станет проще и понятнее, но для полноты картины я просто решил добавить это.
public class Child : CodeActivity<object>
{
public InArgument<Dictionary<string, object>> Data { get; set; }
protected override object Execute(CodeActivityContext context)
{
Dictionary<string, object> data = Data.Get(context);
foreach (var item in data)
{
Console.WriteLine(item);
}
return "Some result";
}
}
public class Parent : NativeActivity<object>
{
public InArgument<int> Value1 { get; set; }
public InArgument<string> Value2 { get; set; }
public ActivityFunc<Dictionary<string, object>, object> Body { get; set; }
protected override void Execute(NativeActivityContext context)
{
int value1 = Value1.Get(context);
string value2 = Value2.Get(context);
Dictionary<string, object> data = new Dictionary<string, object>();
data.Add("value1", value1);
data.Add("value2", value2);
context.ScheduleFunc<Dictionary<string, object>, object>(Body, data, ChildCompletionCallback);
}
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
var arg = new DelegateInArgument<Dictionary<string, object>>();
Body = new ActivityFunc<Dictionary<string, object>, object>
{
Argument = arg,
Handler = new Child() { Data = arg }
};
base.CacheMetadata(metadata);
}
private void ChildCompletionCallback(NativeActivityContext context, ActivityInstance completedInstance, object result)
{
//Set the output for the parent activity at the completion of the child activity
this.Result.Set(context, result);
}
}