/// <summary> /// Loads an NModuleDefinition from a C# Assembly and a full namespace path. /// </summary> public static NModuleDefinition LoadFromAssemblyNamespace(Assembly assembly, string namespc) { var module = new NModuleDefinition(namespc.Split('.').Last(), namespc); // TODO: Could do with a less inificient way of doing this var types = assembly.GetTypes().Where(type => type.Namespace == namespc); var statics = types.SelectMany( type => type.GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy)) .Where(method => method.GetCustomAttributes(typeof (NFunction), false).Length > 0); foreach (var method in statics) { if (method.ReturnType != typeof (void)) throw new Exception("An NFunction cannot return a value, use out parameters instead: " + method.Name); var nFunction = method.GetCustomAttribute<NFunction>(); var displayName = nFunction.DisplayName ?? method.Name.Humanize(LetterCasing.Title); // Create the node definition var nodeDefinition = new NNodeDefinition(null, displayName, nFunction.Description, method.DeclaringType?.FullName + '.' + method.Name); module.Functions.Add(nodeDefinition); // Parameters (Input and Output) foreach (var parameter in method.GetParameters()) { nodeDefinition.Parameters.Add(new NParameterDefinition(parameter)); } } return module; }
public NNode MakeNewNode(NNodeDefinition nodeDefinition) { var nNode = new NNode { Guid = new ShortGuid("NODE_" + (_nextNodeId++).ToSymbolString()), NodeDefinition = nodeDefinition }; Nodes.Add(nNode.Guid, nNode); return(nNode); }