Fixed overrideproperties not applying in customitemservice

Swapped out the old method with new logic that sets the properties using reflection, and can also handle fields.
This commit is contained in:
GrooveypenguinX
2025-06-01 09:05:30 -04:00
committed by GitHub
parent 538355a0f5
commit 772b0e4218
@@ -135,20 +135,56 @@ public class CustomItemService(
/// <summary>
/// Iterates through supplied properties and updates the cloned items properties with them
/// Complex objects cannot have overrides, they must be fully hydrated with values if they are to be used
/// </summary>
/// <param name="overrideProperties"> New properties to apply </param>
/// <param name="itemClone"> Item to update </param>
protected void UpdateBaseItemPropertiesWithOverrides(Props? overrideProperties, TemplateItem itemClone)
{
if (overrideProperties is null)
{
return;
}
if (overrideProperties is null || itemClone?.Properties is null) return;
foreach (var propKey in overrideProperties.GetAllPropsAsDict())
var target = itemClone.Properties;
var targetType = target.GetType();
foreach (var member in overrideProperties.GetType().GetMembers())
{
itemClone.Properties.GetAllPropsAsDict()[propKey.Key] = overrideProperties.GetAllPropsAsDict()[propKey.Key];
var value = member.MemberType switch
{
MemberTypes.Property => ((PropertyInfo)member).GetValue(overrideProperties),
MemberTypes.Field => ((FieldInfo)member).GetValue(overrideProperties),
_ => null
};
if (value is null)
{
continue;
}
var targetMember = targetType.GetMember(member.Name).FirstOrDefault();
if (targetMember is null)
{
continue;
}
switch (targetMember.MemberType)
{
case MemberTypes.Property:
var prop = (PropertyInfo)targetMember;
if (prop.CanWrite)
{
prop.SetValue(target, value);
}
break;
case MemberTypes.Field:
var field = (FieldInfo)targetMember;
if (!field.IsInitOnly)
{
field.SetValue(target, value);
}
break;
}
}
}