예제 #1
0
        // 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;
            }
        }
예제 #2
0
        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);
            }
        }