protected override ElementBuilder Render(ComponentBuilderContext context) { var render = null as YamlNode; foreach (var(keyNode, valueNode) in _mapping) { try { var key = keyNode.ToScalar().Value; if (key == "render") { render = valueNode; continue; } if (!PartHandler.Handle(context, key, valueNode)) { throw new YamlComponentException($"Invalid component part '{key}'.", keyNode); } } catch (Exception e) { context.OnException(e); } } if (render == null) { return(null); } return(BuildElement(context, render)); }
// resolving a style delegate parameter public IPropProvider Resolve(ComponentBuilderContext context, ElementBuilder element, PropTypeInfo prop, YamlNode node) { if (!IsStyleDelegate(prop.Type)) { return(null); } var provider = new Provider(prop.Type); foreach (var(key, value) in node.ToMapping()) { try { // find member by name var memberName = key.ToScalar().Value; var member = provider.FindMember(memberName); // resolve member using prop provider var memberProvider = member == null ? null : ((IYamlComponentBuilder)context.Builder).PropResolver.Resolve(context, null, member, value); if (memberProvider == null) { throw new YamlComponentException($"Cannot resolve property or field '{memberName}' in element {provider.DrawableType}.", key); } provider.Properties[member] = memberProvider; } catch (Exception e) { context.OnException(e); } } return(provider); }
public bool Handle(ComponentBuilderContext context, string name, YamlNode node) { if (name != "import") { return(false); } var assemblies = new List <Assembly>(); foreach (var item in node.ToSequence()) { try { assemblies.Add(Assembly.LoadFrom(item.ToScalar().Value)); } catch (Exception e) { context.OnException(e); } } // append as element resolver with new assemblies var builder = (IYamlComponentBuilder)context.Builder; builder.ElementResolver = new CompositeElementResolver(assemblies.Select(a => new AssemblyElementResolver(a)).Append(builder.ElementResolver)); return(true); }