21this.CreateEventExecutionSteps(EventPostUpdateRequestCache, steps); 22this._endRequestStepIndex = steps.Count; 23this.CreateEventExecutionSteps(EventEndRequest, steps); 24steps.Add(new NoopExecutionStep()); 25this._execSteps = new IExecutionStep[steps.Count]; 26steps.CopyTo(this._execSteps); //把整个数组拷贝给HttpApplication的私有变量_execSteps可以看到,对执行步骤数组的初始化有两种形式,一种是直接添加一个步骤:steps.Add(new MapHandlerExecutionStep(this)); 这种执行步骤是和事件无关的,只是在整个事件流中的特定位置执行一些特定的操作(实例化Handler之类的)。 而另一种是要把相关事件的处理方法列表添加到步骤中,每一个步骤其实是对一个事件的处理:this.CreateEventExecutionSteps(EventBeginRequest, steps); (8)执行步骤数组的执行。 其实在前文中已经提到过了,整个执行步骤数组的执行,是在HttpApplication.ResumeSteps()中调用的。恐怕就算不看这个方法的代码,大家也能想象得出,它是遍历整个执行步骤数组,然后调用其中每一项的Execute方法。这里大家大概也就清楚了,为什么会有一个执行步骤的概念。以笔者看来,首先它在概念上很好理解,完全贴合整个应用处理的管道模型pipeline;第二它屏蔽了引发事件的应用执行步骤和普通的内置执行步骤之间的差别;第三是比较容易在以后对整个流程进行改进和扩展。
(编辑:aniston)
·2024年12月目录 ·2024年11月目录 ·2024年10月目录 ·2024年9月目录 ·2024年8月目录 ·2024年7月目录 ·2024年6月目录 ·2024年5月目录 ·2024年4月目录 ·2024年3月目录 ·2024年2月目录 ·2024年1月目录 ·2023年12月目录 ·2023年11月目录