public SwContextBuilder AddEntrypointMethod(MethodInfo method, SwComponentPriorityEnum priority) { if (_instances.Count > 0) { throw new InvalidOperationException("Already created"); } var entrypoint = ComponentEntrypoint.Create(method, priority); _entrypoints.Add(entrypoint); return(this); }
private ComponentEntrypoint(MethodInfo method, Type[] imports, Type[] exports, PropertyInfo task_result_prop, FieldInfo[] tuple_fields, SwComponentPriorityEnum priority, bool is_async) { _method = method; _taskResultPoperty = task_result_prop; _tupleFields = tuple_fields; InstanceType = method.DeclaringType; Import = imports; Export = exports; Priority = priority; IsAsync = is_async; }
public static ComponentEntrypoint Create(MethodInfo method, SwComponentPriorityEnum priority) { var param = method.GetParameters(); var export = method.ReturnType == typeof(void) ? null : method.ReturnType; var isAsync = export != null && (export == typeof(Task) || export.IsSubclassOf(typeof(Task))); export = isAsync ? export?.GenericTypeArguments?.FirstOrDefault() : export; var imports = param.Select(p => p.ParameterType).ToArray(); var isMultipleRet = export?.IsGenericType ?? false?_valueTupleTypes.Contains(export.GetGenericTypeDefinition()) : false; var exports = isMultipleRet ? export.GenericTypeArguments : export != null ? new[] { export } : Array.Empty <Type>(); var resultProperty = isAsync && export != null ? typeof(Task <>).MakeGenericType(method.ReturnType.GenericTypeArguments.Single()).GetProperty("Result") : null; var tupleFields = isMultipleRet ? export.GetFields() : null; return(new ComponentEntrypoint(method, imports, exports, resultProperty, tupleFields, priority, isAsync)); }
public SwComponentAttribute(SwComponentPriorityEnum priority = SwComponentPriorityEnum.Medium) { Priority = priority; }
public SwComponentInfo(SwComponentPriorityEnum priority, IEntrypoint entrypoint) { Priority = priority; Init(entrypoint); }