Files
WCS/Plugins/Driver/Cowain.Driver/Services/ActionPluginService.cs
2026-03-02 09:08:20 +08:00

74 lines
2.4 KiB
C#

using Plugin.Cowain.Driver.Abstractions;
using Plugin.Cowain.Driver.Attributes;
using Plugin.Cowain.Driver.IServices;
using Plugin.Cowain.Driver.Models;
namespace Plugin.Cowain.Driver.Services;
public class ActionPluginService : IActionPluginService
{
private readonly IEnumerable<IActionCondition> _actionConditions;
private readonly IEnumerable<IVariableAction> _variableActions;
public ActionPluginService(IEnumerable<IActionCondition> actionConditions, IEnumerable<IVariableAction> variableActions)
{
_actionConditions = actionConditions;
_variableActions = variableActions;
}
public List<ActionInfo>? GetActions()
{
var infos = new List<ActionInfo>();
foreach (var item in _variableActions)
{
var action = item.GetType();
var attribute = action.GetCustomAttributes(typeof(ActionAttribute), false).FirstOrDefault() as ActionAttribute;
if (attribute != null)
{
var driverInfo = new ActionInfo
{
Name = attribute.Name,
Desc = attribute.Desc,
};
infos.Add(driverInfo);
}
}
return infos;
}
public List<ConditionInfo>? GetConditions()
{
var infos = new List<ConditionInfo>();
foreach (var item in _actionConditions)
{
var action = item.GetType();
var attribute = action.GetCustomAttributes(typeof(ConditionAttribute), false).FirstOrDefault() as ConditionAttribute;
if (attribute != null)
{
var driverInfo = new ConditionInfo
{
Name = attribute.Name,
Desc = attribute.Desc,
};
infos.Add(driverInfo);
}
}
return infos;
}
public IActionCondition? GetCondition(string name)
{
var condition = _actionConditions.FirstOrDefault(d => d.GetType().GetCustomAttributes(typeof(ConditionAttribute), false).FirstOrDefault() is ConditionAttribute attribute && attribute.Name == name);
return condition;
}
public IVariableAction? GetAction(string name)
{
var action = _variableActions.FirstOrDefault(d => d.GetType().GetCustomAttributes(typeof(ActionAttribute), false).FirstOrDefault() is ActionAttribute attribute && attribute.Name == name);
return action;
}
}