3

我有一个非常简单的 XOML 文件,在处理程序中包含一个代码活动ReceiveActivity

ReceiveActivity 被映射到一个接口IRulesEngineService,在其上调用一个方法。

void DoWork(int i);

接口方法上的输入参数映射到 Xoml 上的一个属性,称为I

简单的工作流程/简单的输入参数

我现在正试图尝试进入工作流程生命周期:

  • 就在第一个(仅在这种情况下)代码活动被执行之前
  • 就在我的工作流程上i分配了参数之后。I

我尝试过覆盖 XOML 上的所有各种方法和事件,但在所有情况下I,我尝试过的所有事件和覆盖都始终为零。然后在第一个代码活动中正确设置为传入的参数。例如,假设我传入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?
    }

任何人都对这些参数的实例化/绑定/设置发生在工作流程生命周期的哪个位置有任何想法。

4

1 回答 1

1

查看 .NET 框架源代码,在执行之前无法访问代码活动中的数据输入。在 System.Workflow.Activities 命名空间的 ReceiveActivity 类中,有一个填充输入的确切点。我已经从这个链接中获取了课程来源

见下图:

ExecuteActivity 方法

正如您在图片中看到的那样,此时填充了输入:

this.OperationHelper.PopulateInputs(this, requestContext.Inputs);

上面的指令在 ReceiveActivity 类执行活动之前被调用。在这个阶段,我认为在你的 codeActivity1_ExecuteCode 被执行之前,没有可以订阅的公共事件来操纵你的数据。

希望能帮助到你。

于 2013-05-24T11:08:34.980 回答