我有一个非常简单的XOML文件,在ReceiveActivity
处理程序中有一个代码活动。
ReceiveActivity通过单一方法映射到名为IRulesEngineService
的接口。
void DoWork(int i);
接口方法的输入参数映射到名为I
的Xoml上的属性
我现在正试图尝试进入工作流程生命周期:
i
参数分配给I
之后我已尝试覆盖XOML上的所有各种方法和事件,但在所有情况下I
在我尝试的所有事件和覆盖中始终为零。然后在第一个Code Activity中正确设置为传入的Parameter。例如想象一下,我将8
传递给ClientSide DoWork呼叫。
public int I {get; set;}
protected override void Initialize(System.IServiceProvider provider)
{
I = I*10; //I is still 0
base.Initialize(provider);
I = I * 10; //I is still 0
}
//Event on Xoml Designer
private void Pinnacle_Initialized(object sender, EventArgs e)
{
I = I * 10; //I is still 0
}
//Event on Xoml Designer
private void receiveActivity1_OperationValidation(object sender, OperationValidationEventArgs e)
{
I = I * 10; //I is still 0
}
protected override void OnActivityExecutionContextLoad(IServiceProvider provider)
{
I = I * 10; //I is still 0
base.OnActivityExecutionContextLoad(provider);
I = I * 10; //I is still 0
}
private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
DataAccess.WriteToDummyData(ConnectionString, "Pinnacle From Code Activity " + I);
//I is now magically '8' what the heck set this?
}
任何人都对工作流生命周期中这些参数的实例化/绑定/设置的位置有任何想法。
答案 0 :(得分:1)
查看.NET框架源代码,在执行之前无法访问代码活动中的数据输入。在System.Workflow.Activities命名空间的ReceiveActivity类中,有一个输入填充的确切位置。我从this link
获取了课程来源见下图:
正如您在图片中看到的那样,输入在此处填充:
this.OperationHelper.PopulateInputs(this, requestContext.Inputs);
上述指令在ReceiveActivity类执行活动之前调用。在这个阶段,我认为在执行codeActivity1_ExecuteCode之前,可以订阅操作数据的公共事件。
希望它有所帮助。