void ITemplateCommand.Apply(Stack <object> values) { var component = values.Peek(); var existing = property.GetValue(component, name); if (existing == null) { throw new NotImplementedException(); } values.Push(existing); }
private void TryAggregation(PropertyTreeMetaObject value, QualifiedName name, PropertyDefinition property, IServiceProvider serviceProvider) { var current = property.GetValue(component, name); var enumerable = value.Component as IEnumerable; if (enumerable != null) { var items = enumerable; if (!ReferenceEquals(current, items) && enumerable.GetEnumerator().MoveNext()) { MethodInfo mi = FindAddonMethod(current.GetType(), enumerable); if (mi == null) { var errors = serviceProvider.TryGetService(PropertyTreeBinderErrors.Default); errors.NoAddMethodSupported(component.GetType(), PropertyTreeBinderImpl.FindFileLocation(serviceProvider)); return; } foreach (var item in items) { mi.Invoke(current, new object[] { item }); } } } }
public virtual PropertyTreeMetaObject CreateChild(PropertyDefinition property, QualifiedName name, PropertyTreeMetaObject ancestor) { var value = property.GetValue(this.Component, ancestor, name); var propertyType = property.PropertyType; // Refine property type if possible if (value == null) { return CreateChild(propertyType); } else { return CreateChild(value, propertyType); } }