Beispiel #1
0
        /// <summary>
        /// 生成指定插件节点对应的目标对象。
        /// </summary>
        /// <param name="node">指定要构建的插件树节点。</param>
        /// <param name="parameter">调用者需要传递给构建器的参数对象。</param>
        /// <param name="build">由调用者指定的构建委托,如果为空则使用对应的构建器的构建动作。</param>
        /// <returns>返回构建成功的目标,如果指定的<paramref name="node"/>类型不是<see cref="PluginTreeNodeType.Builtin"/>则返回节点的<see cref="PluginTreeNode.Value"/>属性值。</returns>
        public object Build(PluginTreeNode node, object parameter, Action <Builders.BuilderContext> build)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            if (_status != PluginTreeStatus.Loaded)
            {
                throw new InvalidOperationException();
            }

            return(node.Build(parameter, build));
        }
Beispiel #2
0
        private void EnsureNodes(PluginTreeNode node)
        {
            if (node == null)
            {
                return;
            }

            if (node.NodeType == PluginTreeNodeType.Builtin)
            {
                if (!((Builtin)node.Value).IsBuilded)
                {
                    node.Build();
                }

                return;
            }

            foreach (var child in node.Children)
            {
                this.EnsureNodes(child);
            }
        }