コード例 #1
0
        protected override object CreateInstance(WorkflowMarkupSerializationManager serializationManager, Type type)
        {
            if (serializationManager == null)
            {
                throw new ArgumentNullException("serializationManager");
            }
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }

            object designer = null;

            IDesignerHost host   = serializationManager.GetService(typeof(IDesignerHost)) as IDesignerHost;
            XmlReader     reader = serializationManager.WorkflowMarkupStack[typeof(XmlReader)] as XmlReader;

            if (host != null && reader != null)
            {
                //Find the associated activity
                string associatedActivityName = String.Empty;
                while (reader.MoveToNextAttribute() && !reader.LocalName.Equals("Name", StringComparison.Ordinal))
                {
                    ;
                }
                if (reader.LocalName.Equals("Name", StringComparison.Ordinal) && reader.ReadAttributeValue())
                {
                    associatedActivityName = reader.Value;
                }
                reader.MoveToElement();

                if (!String.IsNullOrEmpty(associatedActivityName))
                {
                    CompositeActivityDesigner parentDesigner = serializationManager.Context[typeof(CompositeActivityDesigner)] as CompositeActivityDesigner;
                    if (parentDesigner == null)
                    {
                        Activity activity = host.RootComponent as Activity;
                        if (activity != null && !associatedActivityName.Equals(activity.Name, StringComparison.Ordinal))
                        {
                            foreach (IComponent component in host.Container.Components)
                            {
                                activity = component as Activity;
                                if (activity != null && associatedActivityName.Equals(activity.Name, StringComparison.Ordinal))
                                {
                                    break;
                                }
                            }
                        }

                        if (activity != null)
                        {
                            designer = host.GetDesigner(activity);
                        }
                    }
                    else
                    {
                        CompositeActivity compositeActivity = parentDesigner.Activity as CompositeActivity;
                        if (compositeActivity != null)
                        {
                            Activity matchingActivity = null;
                            foreach (Activity activity in compositeActivity.Activities)
                            {
                                if (associatedActivityName.Equals(activity.Name, StringComparison.Ordinal))
                                {
                                    matchingActivity = activity;
                                    break;
                                }
                            }

                            if (matchingActivity != null)
                            {
                                designer = host.GetDesigner(matchingActivity);
                            }
                        }
                    }

                    if (designer == null)
                    {
                        serializationManager.ReportError(SR.GetString(SR.Error_LayoutSerializationActivityNotFound, reader.LocalName, associatedActivityName, "Name"));
                    }
                }
                else
                {
                    serializationManager.ReportError(SR.GetString(SR.Error_LayoutSerializationAssociatedActivityNotFound, reader.LocalName, "Name"));
                }
            }

            return(designer);
        }
コード例 #2
0
        protected override object CreateInstance(WorkflowMarkupSerializationManager serializationManager, Type type)
        {
            Activity activity3;

            if (serializationManager == null)
            {
                throw new ArgumentNullException("serializationManager");
            }
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }
            object        obj2    = null;
            IDesignerHost service = serializationManager.GetService(typeof(IDesignerHost)) as IDesignerHost;
            XmlReader     reader  = serializationManager.WorkflowMarkupStack[typeof(XmlReader)] as XmlReader;

            if ((service == null) || (reader == null))
            {
                return(obj2);
            }
            string str = string.Empty;

            while (reader.MoveToNextAttribute() && !reader.LocalName.Equals("Name", StringComparison.Ordinal))
            {
            }
            if (reader.LocalName.Equals("Name", StringComparison.Ordinal) && reader.ReadAttributeValue())
            {
                str = reader.Value;
            }
            reader.MoveToElement();
            if (string.IsNullOrEmpty(str))
            {
                serializationManager.ReportError(SR.GetString("Error_LayoutSerializationAssociatedActivityNotFound", new object[] { reader.LocalName, "Name" }));
                return(obj2);
            }
            CompositeActivityDesigner designer = serializationManager.Context[typeof(CompositeActivityDesigner)] as CompositeActivityDesigner;

            if (designer != null)
            {
                CompositeActivity activity2 = designer.Activity as CompositeActivity;
                if (activity2 == null)
                {
                    goto Label_01D0;
                }
                activity3 = null;
                foreach (Activity activity4 in activity2.Activities)
                {
                    if (str.Equals(activity4.Name, StringComparison.Ordinal))
                    {
                        activity3 = activity4;
                        break;
                    }
                }
            }
            else
            {
                Activity rootComponent = service.RootComponent as Activity;
                if ((rootComponent != null) && !str.Equals(rootComponent.Name, StringComparison.Ordinal))
                {
                    foreach (IComponent component in service.Container.Components)
                    {
                        rootComponent = component as Activity;
                        if ((rootComponent != null) && str.Equals(rootComponent.Name, StringComparison.Ordinal))
                        {
                            break;
                        }
                    }
                }
                if (rootComponent != null)
                {
                    obj2 = service.GetDesigner(rootComponent);
                }
                goto Label_01D0;
            }
            if (activity3 != null)
            {
                obj2 = service.GetDesigner(activity3);
            }
Label_01D0:
            if (obj2 == null)
            {
                serializationManager.ReportError(SR.GetString("Error_LayoutSerializationActivityNotFound", new object[] { reader.LocalName, str, "Name" }));
            }
            return(obj2);
        }