Esempio n. 1
0
 /// <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;
 }
Esempio n. 2
0
        public NNode MakeNewNode(NNodeDefinition nodeDefinition)
        {
            var nNode = new NNode
            {
                Guid           = new ShortGuid("NODE_" + (_nextNodeId++).ToSymbolString()),
                NodeDefinition = nodeDefinition
            };

            Nodes.Add(nNode.Guid, nNode);
            return(nNode);
        }