public override void PerformReflection(ReflectionContext context) { Type workflowType = ((WorkflowNode)context.CurrentTreeNode).WorkflowType; object workflowInstance = null; try { workflowInstance = workflowType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, null, CultureInfo.InvariantCulture); } catch (Exception exc) { MessageBox.Show("Workflow type could not be created: " + exc.ToString()); return; } Activity root = (Activity)workflowInstance; Queue <Activity> toProcess = new Queue <Activity>(); List <Type> foundInterfaces = new List <Type>(); toProcess.Enqueue(root); while (toProcess.Count > 0) { Activity activity = toProcess.Dequeue(); if (activity is CompositeActivity) { CompositeActivity compositeActivity = (CompositeActivity)activity; foreach (Activity child in compositeActivity.Activities) { toProcess.Enqueue(child); } } else if (activity is HandleExternalEventActivity) { HandleExternalEventActivity eventSink = (HandleExternalEventActivity)activity; if (!foundInterfaces.Contains(eventSink.InterfaceType)) { foundInterfaces.Add(eventSink.InterfaceType); } } else if (activity is CallExternalMethodActivity) { CallExternalMethodActivity invoke = (CallExternalMethodActivity)activity; if (!foundInterfaces.Contains(invoke.InterfaceType)) { foundInterfaces.Add(invoke.InterfaceType); } } } foreach (Type service in foundInterfaces) { ServiceInterfaceNode node = new ServiceInterfaceNode(); node.ServiceInterfaceType = service; node.Text = "Required Service: " + service.FullName; node.SelectedImageIndex = node.ImageIndex = context.GetImageIndex(typeof(RequiredServiceInterfacesComponent), ServiceInterfaceNodeImageName); context.CurrentTreeNode.Nodes.Add(node); ReflectChildComponents(context.CreateClone(node)); } }
public override void PerformReflection(ReflectionContext context) { Type workflowType = ((WorkflowNode)context.CurrentTreeNode).WorkflowType; object workflowInstance = null; try { workflowInstance = workflowType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, null, CultureInfo.InvariantCulture); } catch (Exception exc) { MessageBox.Show("Workflow type could not be created: " + exc.ToString()); return; } Activity root = (Activity)workflowInstance; Queue<Activity> toProcess = new Queue<Activity>(); List<Type> foundInterfaces = new List<Type>(); toProcess.Enqueue(root); while (toProcess.Count > 0) { Activity activity = toProcess.Dequeue(); if (activity is CompositeActivity) { CompositeActivity compositeActivity = (CompositeActivity)activity; foreach (Activity child in compositeActivity.Activities) { toProcess.Enqueue(child); } } else if (activity is HandleExternalEventActivity) { HandleExternalEventActivity eventSink = (HandleExternalEventActivity)activity; if (!foundInterfaces.Contains(eventSink.InterfaceType)) { foundInterfaces.Add(eventSink.InterfaceType); } } else if (activity is CallExternalMethodActivity) { CallExternalMethodActivity invoke = (CallExternalMethodActivity)activity; if (!foundInterfaces.Contains(invoke.InterfaceType)) { foundInterfaces.Add(invoke.InterfaceType); } } } foreach (Type service in foundInterfaces) { ServiceInterfaceNode node = new ServiceInterfaceNode(); node.ServiceInterfaceType = service; node.Text = "Required Service: " + service.FullName; node.SelectedImageIndex = node.ImageIndex = context.GetImageIndex(typeof(RequiredServiceInterfacesComponent), ServiceInterfaceNodeImageName); context.CurrentTreeNode.Nodes.Add(node); ReflectChildComponents(context.CreateClone(node)); } }