public static void UpdateControls <TActivityUi>(this ICrateStorage storage, Action <TActivityUi> action) where TActivityUi : StandardConfigurationControlsCM, new() { if (action == null) { throw new ArgumentNullException(nameof(action)); } var controlsCrate = storage.FirstCrate <StandardConfigurationControlsCM>(); var activityUi = new TActivityUi().ClonePropertiesFrom(controlsCrate.Content) as TActivityUi; activityUi.RestoreDynamicControlsFrom(controlsCrate.Content); action(activityUi); var newControls = new StandardConfigurationControlsCM(activityUi.Controls.ToArray()); storage.ReplaceByLabel(Crate.FromContent(controlsCrate.Label, newControls)); activityUi.SaveDynamicControlsTo(newControls); }