// helper method : 按照 DirectorAttribute 的要求,执行相关的 Builder 方法 private void InvokeBuildPartMethod( IAttributedBuilder builder, DirectorAttribute attribute) { switch (attribute.Method) { case "BuildPartA": builder.BuildPartA(); break; case "BuildPartB": builder.BuildPartB(); break; case "BuildPartC": builder.BuildPartC(); break; } }
public void BuildUp(IAttributedBuilder builder) { // 获取 Builder 的 DirectorAttribute 属性 object[] attributes = builder.GetType().GetCustomAttributes(typeof(DirectorAttribute), false); if (attributes.Length <= 0) { return; } DirectorAttribute[] directors = new DirectorAttribute[attributes.Length]; for (int i = 0; i < attributes.Length; i++) { directors[i] = (DirectorAttribute)attributes[i]; } // 按每个 DirectorAttribute 优先级逆序排序后,逐个执行 Array.Sort <DirectorAttribute>(directors); foreach (DirectorAttribute attribute in directors) { InvokeBuildPartMethod(builder, attribute); } }