public void UpdateConfiguration(EffectConfig config) { if (context != null) { throw new InvalidOperationException(); } var remainingFieldNames = new List <string>(config.FieldNames); foreach (var configurableField in configurableFields) { var field = configurableField.Field; var allowedValues = (NamedValue[])null; var fieldType = field.FieldType; if (fieldType.IsEnum) { var enumValues = Enum.GetValues(fieldType); fieldType = Enum.GetUnderlyingType(fieldType); allowedValues = new NamedValue[enumValues.Length]; for (var i = 0; i < enumValues.Length; i++) { var value = enumValues.GetValue(i); allowedValues[i] = new NamedValue() { Name = value.ToString(), Value = Convert.ChangeType(value, fieldType, CultureInfo.InvariantCulture), }; } } try { var displayName = configurableField.Attribute.DisplayName ?? field.Name; var initialValue = Convert.ChangeType(configurableField.InitialValue, fieldType, CultureInfo.InvariantCulture); config.UpdateField(field.Name, displayName, configurableField.Order, fieldType, initialValue, allowedValues); var value = config.GetValue(field.Name); field.SetValue(this, value); remainingFieldNames.Remove(field.Name); } catch (Exception e) { Trace.WriteLine($"Failed to update configuration for {field.Name} with type {fieldType}:\n{e}"); } } foreach (var name in remainingFieldNames) { config.RemoveField(name); } }
public void ApplyConfiguration(EffectConfig config) { if (context != null) { throw new InvalidOperationException(); } foreach (var configurableField in configurableFields) { var field = configurableField.Field; try { var value = config.GetValue(field.Name); field.SetValue(this, value); } catch (Exception e) { Trace.WriteLine($"Failed to apply configuration for {field.Name}:\n{e}"); } } }