mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-08-20 11:32:57 +00:00
Refactored SettingsLocker
to use an extension method for cleaner property expression handling
This commit is contained in:
parent
e8e79a635f
commit
695cc4cbbb
26
app/MindWork AI Studio/Settings/ExpressionExtensions.cs
Normal file
26
app/MindWork AI Studio/Settings/ExpressionExtensions.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using System.Linq.Expressions;
|
||||
|
||||
namespace AIStudio.Settings;
|
||||
|
||||
public static class ExpressionExtensions
|
||||
{
|
||||
private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(typeof(ExpressionExtensions));
|
||||
|
||||
public static MemberExpression GetMemberExpression<T>(this Expression<Func<T, object>> expression)
|
||||
{
|
||||
switch (expression.Body)
|
||||
{
|
||||
// Case for value types, which are wrapped in UnaryExpression:
|
||||
case UnaryExpression { NodeType: ExpressionType.Convert } unaryExpression:
|
||||
return (MemberExpression)unaryExpression.Operand;
|
||||
|
||||
// Case for reference types, which are directly MemberExpressions:
|
||||
case MemberExpression memberExpression:
|
||||
return memberExpression;
|
||||
|
||||
default:
|
||||
LOGGER.LogError($"Expression '{expression}' is not a valid property expression.");
|
||||
throw new ArgumentException($"Expression '{expression}' is not a valid property expression.", nameof(expression));
|
||||
}
|
||||
}
|
||||
}
|
@ -4,12 +4,11 @@ namespace AIStudio.Settings;
|
||||
|
||||
public sealed class SettingsLocker
|
||||
{
|
||||
private static readonly ILogger<SettingsLocker> LOGGER = Program.LOGGER_FACTORY.CreateLogger<SettingsLocker>();
|
||||
private readonly Dictionary<string, Dictionary<string, Guid>> lockedProperties = new();
|
||||
|
||||
public void Register<T>(Expression<Func<T, object>> propertyExpression, Guid configurationPluginId)
|
||||
{
|
||||
var memberExpression = GetMemberExpression(propertyExpression);
|
||||
var memberExpression = propertyExpression.GetMemberExpression();
|
||||
var className = typeof(T).Name;
|
||||
var propertyName = memberExpression.Member.Name;
|
||||
|
||||
@ -21,7 +20,7 @@ public sealed class SettingsLocker
|
||||
|
||||
public void Remove<T>(Expression<Func<T, object>> propertyExpression)
|
||||
{
|
||||
var memberExpression = GetMemberExpression(propertyExpression);
|
||||
var memberExpression = propertyExpression.GetMemberExpression();
|
||||
var className = typeof(T).Name;
|
||||
var propertyName = memberExpression.Member.Name;
|
||||
|
||||
@ -38,7 +37,7 @@ public sealed class SettingsLocker
|
||||
|
||||
public Guid GetConfigurationPluginId<T>(Expression<Func<T, object>> propertyExpression)
|
||||
{
|
||||
var memberExpression = GetMemberExpression(propertyExpression);
|
||||
var memberExpression = propertyExpression.GetMemberExpression();
|
||||
var className = typeof(T).Name;
|
||||
var propertyName = memberExpression.Member.Name;
|
||||
|
||||
@ -51,28 +50,10 @@ public sealed class SettingsLocker
|
||||
|
||||
public bool IsLocked<T>(Expression<Func<T, object>> propertyExpression)
|
||||
{
|
||||
var memberExpression = GetMemberExpression(propertyExpression);
|
||||
var memberExpression = propertyExpression.GetMemberExpression();
|
||||
var className = typeof(T).Name;
|
||||
var propertyName = memberExpression.Member.Name;
|
||||
|
||||
return this.lockedProperties.TryGetValue(className, out var props) && props.ContainsKey(propertyName);
|
||||
}
|
||||
|
||||
private static MemberExpression GetMemberExpression<T>(Expression<Func<T, object>> expression)
|
||||
{
|
||||
switch (expression.Body)
|
||||
{
|
||||
// Case for value types, which are wrapped in UnaryExpression:
|
||||
case UnaryExpression { NodeType: ExpressionType.Convert } unaryExpression:
|
||||
return (MemberExpression)unaryExpression.Operand;
|
||||
|
||||
// Case for reference types, which are directly MemberExpressions:
|
||||
case MemberExpression memberExpression:
|
||||
return memberExpression;
|
||||
|
||||
default:
|
||||
LOGGER.LogError($"Expression '{expression}' is not a valid property expression.");
|
||||
throw new ArgumentException($"Expression '{expression}' is not a valid property expression.", nameof(expression));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user