refactor!: Identifiable interface extracted from IEntity

This commit is contained in:
2025-10-26 22:34:50 +03:00
parent 30a07dd034
commit ac2e160abb
13 changed files with 94 additions and 88 deletions

View File

@@ -43,8 +43,8 @@ public class SerializedClass
continue;
object? value = privatePropertyInfo.GetValue(@class);
if (value is IEntity entity)
Private.Add(privatePropertyInfo.Name, entity.Id);
if (value is IIdentifiable identifiable)
Private.Add(privatePropertyInfo.Name, identifiable.Id);
else
Private.Add(privatePropertyInfo.Name, value);
}
@@ -61,8 +61,8 @@ public class SerializedClass
continue;
object? value = publicPropertyInfo.GetValue(@class);
if (value is IEntity entity)
Public.Add(publicPropertyInfo.Name, entity.Id);
if (value is IIdentifiable identifiable)
Public.Add(publicPropertyInfo.Name, identifiable.Id);
else
Public.Add(publicPropertyInfo.Name, value);
}
@@ -76,8 +76,8 @@ public class SerializedClass
continue;
object? value = privateFieldInfo.GetValue(@class);
if (value is IEntity entity)
Private.Add(privateFieldInfo.Name, entity.Id);
if (value is IIdentifiable identifiable)
Private.Add(privateFieldInfo.Name, identifiable.Id);
else
Private.Add(privateFieldInfo.Name, value);
}
@@ -91,8 +91,8 @@ public class SerializedClass
continue;
object? value = publicFieldInfo.GetValue(@class);
if (value is IEntity entity)
Public.Add(publicFieldInfo.Name, entity.Id);
if (value is IIdentifiable identifiable)
Public.Add(publicFieldInfo.Name, identifiable.Id);
else
Public.Add(publicFieldInfo.Name, value);
}
@@ -112,36 +112,36 @@ public class SerializedClass
return instance;
}
public object CreateInstance(EntityRegistry? entityRegistry)
public object CreateInstance(IdentifiableRegistry? identifiableRegistry)
{
if (entityRegistry is null)
if (identifiableRegistry is null)
return CreateInstance();
Type type = TypeFactory.GetType(Type);
object instance = TypeFactory.Get(type);
foreach ((string key, object? value) in Private)
AssignVariable(key, type, instance, value, PRIVATE_BINDING_FLAGS, entityRegistry);
AssignVariable(key, type, instance, value, PRIVATE_BINDING_FLAGS, identifiableRegistry);
foreach ((string key, object? value) in Public)
AssignVariable(key, type, instance, value, PUBLIC_BINDING_FLAGS, entityRegistry);
AssignVariable(key, type, instance, value, PUBLIC_BINDING_FLAGS, identifiableRegistry);
return instance;
}
private static void AssignVariable(string key, Type type, object instance, object? value, BindingFlags bindingFlags, EntityRegistry entityRegistry)
private static void AssignVariable(string key, Type type, object instance, object? value, BindingFlags bindingFlags, IdentifiableRegistry identifiableRegistry)
{
if (type.GetField(key, bindingFlags) is FieldInfo fieldInfo)
{
if (typeof(IEntity).IsAssignableFrom(fieldInfo.FieldType))
entityRegistry.QueueAssign(value?.ToString() ?? "", (entity) => fieldInfo.SetValue(instance, entity));
if (typeof(IIdentifiable).IsAssignableFrom(fieldInfo.FieldType))
identifiableRegistry.QueueAssign(value?.ToString() ?? "", (entity) => fieldInfo.SetValue(instance, entity));
else
fieldInfo.SetValue(instance, value);
}
else if (type.GetProperty(key, bindingFlags) is PropertyInfo propertyInfo)
{
if (typeof(IEntity).IsAssignableFrom(propertyInfo.PropertyType))
entityRegistry.QueueAssign(value?.ToString() ?? "", (entity) => propertyInfo.SetValue(instance, entity));
if (typeof(IIdentifiable).IsAssignableFrom(propertyInfo.PropertyType))
identifiableRegistry.QueueAssign(value?.ToString() ?? "", (entity) => propertyInfo.SetValue(instance, entity));
else
propertyInfo.SetValue(instance, value);
}