public virtual T BuildUp() { var steps = new BuilderStepDiscovery().DiscoveryBuildSteps(typeof(T)); if (steps == null) { return(new T()); // 没有BuildPart步骤,退化为Factory模式 } var target = new T(); foreach (var step in steps) { for (var i = 0; i < step.Times; i++) { step.Method.Invoke(target, null); } } return(target); }
public virtual T BuildUp() { var steps = new B.BuilderStepDiscovery().DiscoveryBuildSteps(typeof(T)); if (steps == null) { return(new T()); // 没有BuildPart步骤,退化为Factory模式 } var target = new T(); // BuildUp() 执行前的切入点 if (BeforeBuildUp != null) { BeforeBuildUp(this, new BuilderEventArgs <T>() { Target = target }); } foreach (var step in steps) { for (var i = 0; i < step.Times; i++) { // BuildPart() 执行前的切入点 if (BeforeBuildStepExecuting != null) { BeforeBuildStepExecuting(this, new BuilderStepEventArgs <T>() { Target = target, Step = step, CurrentLoop = i }); } step.Method.Invoke(target, null); // BuildPart() 执行后的切入点 if (AfterBuildStepExecuted != null) { AfterBuildStepExecuted(this, new BuilderStepEventArgs <T>() { Target = target, Step = step, CurrentLoop = i }); } } } // BuildUp() 执行后的切入点 if (AfterBuildUp != null) { AfterBuildUp(this, new BuilderEventArgs <T>() { Target = target }); } return(target); }