diff --git a/Library/NodeAttribute.cs b/Library/NodeAttribute.cs index 8101672..68da2fd 100644 --- a/Library/NodeAttribute.cs +++ b/Library/NodeAttribute.cs @@ -58,7 +58,7 @@ namespace Serein.Library /// 表示该类中存在节点信息 /// [AttributeUsage(AttributeTargets.Class)] - public class DynamicFlowAttribute : Attribute + public sealed class DynamicFlowAttribute : Attribute { public DynamicFlowAttribute(string name = "",bool scan = true) { @@ -82,7 +82,7 @@ namespace Serein.Library /// 如果是Task类型的返回值,将会自动进行等待 /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] - public class NodeActionAttribute : Attribute + public sealed class NodeActionAttribute : Attribute { public NodeActionAttribute(NodeType methodDynamicType, string methodTips = "", @@ -113,17 +113,25 @@ namespace Serein.Library } + /// + /// 节点参数设置 + /// + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class NodeParamAttribute : Attribute + { + /// + /// 显示名称 + /// + public string Name; - //[AttributeUsage(AttributeTargets.Field)] - //public class BindTypeAttribute : Attribute - //{ - // public Type Type { get; } + /// + /// 是否显式设置(此设置对于有入参默认值的参数无效) + /// + public bool IsExplicit; + + + } - // public BindTypeAttribute(Type type) - // { - // Type = type; - // } - //} [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] public class BindValueAttribute : Attribute @@ -136,6 +144,8 @@ namespace Serein.Library } } + + /// /// 枚举值转换器,要求枚举项标记的BindValueAttribute特性,与搭配的参数类型一致,否则参数不会传入 /// diff --git a/Library/SereinBaseFunction.cs b/Library/SereinBaseFunction.cs index 3237df8..c0d8961 100644 --- a/Library/SereinBaseFunction.cs +++ b/Library/SereinBaseFunction.cs @@ -17,51 +17,11 @@ namespace Serein.Library [DynamicFlow(Name ="[基础功能]")] public class SereinBaseFunction { - //[NodeAction(NodeType.Action,"条件节点")] - //private bool SereinConditionNode(IDynamicContext context, - // object targetObject, - // string exp = "ISPASS") - //{ - // var isPass = SereinConditionParser.To(targetObject, exp); - // context.NextOrientation = isPass ? ConnectionInvokeType.IsSucceed : ConnectionInvokeType.IsFail; - // return isPass; - //} - - //[NodeAction(NodeType.Action, "表达式节点")] - //private object SereinExpNode(IDynamicContext context, - // object targetObject, - // string exp) - //{ - - // exp = "@" + exp; - // var newData = SerinExpressionEvaluator.Evaluate(exp, targetObject, out bool isChange); - // object result; - // if (isChange || exp.StartsWith("@GET",System.StringComparison.OrdinalIgnoreCase)) - // { - // result = newData; - // } - // else - // { - // result = targetObject; - // } - // context.NextOrientation = ConnectionInvokeType.IsSucceed; - // return result; - //} - - - + [NodeAction(NodeType.Action, "键值对组装")] - private Dictionary SereinKvDataCollectionNode(/*NodeModelBase nodeModel, */ - string argName, + private Dictionary SereinKvDataCollectionNode(string argName, params object[] value) { - //var paramsArgIndex = nodeModel.MethodDetails.ParamsArgIndex; - //var pds = nodeModel.MethodDetails.ParameterDetailss; - //var length = pds.Length - paramsArgIndex; - //for(int i = paramsArgIndex; i < pds.Length; i++) - //{ - // var pd = pds[i]; - //} var names = argName.Split(';'); var count = Math.Min(value.Length, names.Length); @@ -90,7 +50,9 @@ namespace Serein.Library } [NodeAction(NodeType.Action, "逻辑分支")] - private object SereinLogicalBranch(bool @bool, object t_value,object f_value) + private object SereinLogicalBranch([NodeParam(IsExplicit = false)]bool @bool, + object t_value, + object f_value) { return @bool ? t_value : f_value; } @@ -141,7 +103,7 @@ namespace Serein.Library [NodeAction(NodeType.Action, "设置/更新全局数据")] - private object SereinAddOrUpdateFlowGlobalData(string name,object data) + private object SereinAddOrUpdateFlowGlobalData(string name, object data) { SereinEnv.AddOrUpdateFlowGlobalData(name, data); return data; diff --git a/NodeFlow/Tool/NodeMethodDetailsHelper.cs b/NodeFlow/Tool/NodeMethodDetailsHelper.cs index fffa778..7fbfe1f 100644 --- a/NodeFlow/Tool/NodeMethodDetailsHelper.cs +++ b/NodeFlow/Tool/NodeMethodDetailsHelper.cs @@ -267,7 +267,7 @@ public static class NodeMethodDetailsHelper #endregion }).ToArray(); - foreach(var pd in tempParams) + /* foreach(var pd in tempParams) { var argType = pd.DataType; // 运行环境 @@ -285,9 +285,8 @@ public static class NodeMethodDetailsHelper { continue; } - pd.IsExplicitData = true; - } + }*/ return tempParams; } @@ -311,7 +310,26 @@ public static class NodeMethodDetailsHelper { dataType = parameterInfo.ParameterType; } - var description = parameterInfo.GetCustomAttribute()?.Description ?? ""; + isExplicitData = true; + string description = string.Empty; // 入参描述 + var nodeParmsAttribute = parameterInfo.GetCustomAttribute(); + if(nodeParmsAttribute is not null) + { + if (!parameterInfo.HasDefaultValue) + { + isExplicitData = nodeParmsAttribute.IsExplicit; // 设置是否是显式参数 + } + if (string.IsNullOrEmpty(nodeParmsAttribute.Name)) + { + description = nodeParmsAttribute.Name; // 设置显示的名称 + } + + } + else + { + description = parameterInfo.GetCustomAttribute()?.Description ?? string.Empty; // 判断是否存在注释特性 + } + var inputType = GetInputType(explicitParemType); var items = GetExplicitItems(explicitParemType, inputType); diff --git a/Workbench/Services/WorkbenchEventService.cs b/Workbench/Services/WorkbenchEventService.cs index 7e91d60..33bbd94 100644 --- a/Workbench/Services/WorkbenchEventService.cs +++ b/Workbench/Services/WorkbenchEventService.cs @@ -68,9 +68,9 @@ namespace Serein.Workbench.Services /// /// public WorkbenchEventService(IFlowEnvironment flowEnvironment, - IFlowEEForwardingService flowEEForwardingService, - IKeyEventService keyEventService, - FlowNodeService flowNodeService) + IFlowEEForwardingService flowEEForwardingService, + IKeyEventService keyEventService, + FlowNodeService flowNodeService) { this.flowEnvironment = flowEnvironment; this.flowEEForwardingService = flowEEForwardingService; @@ -81,11 +81,17 @@ namespace Serein.Workbench.Services private void InitEvents() { + flowEEForwardingService.OnProjectLoaded += FlowEEForwardingService_OnProjectLoaded; flowEEForwardingService.OnProjectSaving += SaveProjectToLocalFile; flowEEForwardingService.OnEnvOut += FlowEEForwardingService_OnEnvOut; keyEventService.OnKeyDown += KeyEventService_OnKeyDown; ; } + private void FlowEEForwardingService_OnProjectLoaded(ProjectLoadedEventArgs eventArgs) + { + + } + private void KeyEventService_OnKeyDown(System.Windows.Input.Key key) {