internal static void RegisterMetadata(AttributeTableBuilder builder)
        {
            Type assignType = typeof(Assign);

            builder.AddCustomAttributes(assignType, new DesignerAttribute(typeof(AssignDesigner)));
            builder.AddCustomAttributes(assignType, new ActivityDesignerOptionsAttribute {
                AllowDrillIn = false
            });

            Func <Activity, IEnumerable <ArgumentAccessor> > argumentAccessorGenerator = (activity) =>
            {
                return(new ArgumentAccessor[]
                {
                    new ArgumentAccessor
                    {
                        Getter = (ownerActivity) => ((Assign)ownerActivity).To,
                        Setter = (ownerActivity, arg) => ((Assign)ownerActivity).To = arg as OutArgument,
                    },
                    new ArgumentAccessor
                    {
                        Getter = (ownerActivity) => ((Assign)ownerActivity).Value,
                        Setter = (ownerActivity, arg) => ((Assign)ownerActivity).Value = arg as InArgument,
                    },
                });
            };

            ActivityArgumentHelper.RegisterAccessorsGenerator(assignType, argumentAccessorGenerator);
        }
Exemple #2
0
        static SendReplyDesigner()
        {
            AttributeTableBuilder builder = new AttributeTableBuilder();
            Type sendType = typeof(SendReply);

            builder.AddCustomAttributes(sendType, sendType.GetProperty("CorrelationInitializers"), PropertyValueEditor.CreateEditorAttribute(typeof(CorrelationInitializerValueEditor)));

            var categoryAttribute = new CategoryAttribute(EditorCategoryTemplateDictionary.Instance.GetCategoryTitle(CorrelationsCategoryLabelKey));

            builder.AddCustomAttributes(sendType, sendType.GetProperty("CorrelationInitializers"), categoryAttribute, BrowsableAttribute.Yes,
                                        PropertyValueEditor.CreateEditorAttribute(typeof(CorrelationInitializerValueEditor)));

            categoryAttribute = new CategoryAttribute(EditorCategoryTemplateDictionary.Instance.GetCategoryTitle(MiscellaneousCategoryLabelKey));

            builder.AddCustomAttributes(sendType, sendType.GetProperty("DisplayName"), categoryAttribute);
            var descriptionAttribute = new DescriptionAttribute(StringResourceDictionary.Instance.GetString("messagingValueHint", "<Value to bind>"));

            builder.AddCustomAttributes(sendType, sendType.GetProperty("Content"), categoryAttribute, descriptionAttribute, PropertyValueEditor.CreateEditorAttribute(typeof(SendContentPropertyEditor)));
            builder.AddCustomAttributes(sendType, sendType.GetProperty("Request"),
                                        categoryAttribute,
                                        PropertyValueEditor.CreateEditorAttribute(typeof(ActivityXRefPropertyEditor)));

            var advancedAttribute = new EditorBrowsableAttribute(EditorBrowsableState.Advanced);

            builder.AddCustomAttributes(sendType, sendType.GetProperty("Action"), categoryAttribute, advancedAttribute);

            Action = sendType.GetProperty("Action").Name;

            Type sendMessageContentType = typeof(SendMessageContent);

            Message             = sendMessageContentType.GetProperty("Message").Name;
            DeclaredMessageType = sendMessageContentType.GetProperty("DeclaredMessageType").Name;

            MetadataStore.AddAttributeTable(builder.CreateTable());

            Func <Activity, IEnumerable <ArgumentAccessor> > argumentAccessorGenerator = (activity) => new ArgumentAccessor[]
            {
                new ArgumentAccessor
                {
                    Getter = (ownerActivity) =>
                    {
                        SendReply          sendReply = (SendReply)ownerActivity;
                        SendMessageContent content   = sendReply.Content as SendMessageContent;
                        return(content != null ? content.Message : null);
                    },
                    Setter = (ownerActivity, arg) =>
                    {
                        SendReply          sendReply = (SendReply)ownerActivity;
                        SendMessageContent content   = sendReply.Content as SendMessageContent;
                        if (content != null)
                        {
                            content.Message = arg as InArgument;
                        }
                    },
                },
            };

            ActivityArgumentHelper.RegisterAccessorsGenerator(sendType, argumentAccessorGenerator);
        }
        public static void RegisterMetadata(AttributeTableBuilder builder)
        {
            Type type = typeof(InvokeMethod);

            builder.AddCustomAttributes(type, new DesignerAttribute(typeof(InvokeMethodDesigner)));
            builder.AddCustomAttributes(
                type,
                "GenericTypeArguments",
                PropertyValueEditor.CreateEditorAttribute(typeof(TypeCollectionPropertyEditor)),
                new EditorOptionAttribute {
                Name = TypeCollectionPropertyEditor.AllowDuplicate, Value = true
            });
            builder.AddCustomAttributes(
                type,
                "Parameters",
                PropertyValueEditor.CreateEditorAttribute(typeof(ArgumentCollectionPropertyEditor)));
            builder.AddCustomAttributes(
                type,
                "TargetType",
                new EditorOptionAttribute {
                Name = TypePropertyEditor.AllowNull, Value = true
            },
                new EditorOptionAttribute {
                Name = TypePropertyEditor.BrowseTypeDirectly, Value = false
            });
            builder.AddCustomAttributes(type, new ActivityDesignerOptionsAttribute {
                AllowDrillIn = false
            });

            Func <Activity, IEnumerable <ArgumentAccessor> > argumentAccessorGenerator = (activity) => new ArgumentAccessor[]
            {
                new ArgumentAccessor
                {
                    Getter = (ownerActivity) => ((InvokeMethod)ownerActivity).TargetObject,
                    Setter = (ownerActivity, arg) =>
                    {
                        ((InvokeMethod)ownerActivity).TargetObject = arg as InArgument;
                    },
                },
                new ArgumentAccessor
                {
                    Getter = (ownerActivity) => ((InvokeMethod)ownerActivity).Result,
                    Setter = (ownerActivity, arg) =>
                    {
                        ((InvokeMethod)ownerActivity).Result = arg as OutArgument;
                    },
                },
            };

            ActivityArgumentHelper.RegisterAccessorsGenerator(type, argumentAccessorGenerator);
        }
        static ReceiveDesigner()
        {
            AttributeTableBuilder builder = new AttributeTableBuilder();
            Type receiveType = typeof(Receive);

            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("CorrelationInitializers"), PropertyValueEditor.CreateEditorAttribute(typeof(CorrelationInitializerValueEditor)));

            var categoryAttribute    = new CategoryAttribute(EditorCategoryTemplateDictionary.Instance.GetCategoryTitle(CorrelationsCategoryLabelKey));
            var descriptionAttribute = new DescriptionAttribute(StringResourceDictionary.Instance.GetString("messagingCorrelatesWithHint", "<Correlation handle>"));

            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("CorrelatesWith"), categoryAttribute, descriptionAttribute);

            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("CorrelatesOn"), categoryAttribute, BrowsableAttribute.Yes,
                                        PropertyValueEditor.CreateEditorAttribute(typeof(CorrelatesOnValueEditor)));
            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("CorrelationInitializers"), categoryAttribute, BrowsableAttribute.Yes,
                                        PropertyValueEditor.CreateEditorAttribute(typeof(CorrelationInitializerValueEditor)));

            categoryAttribute = new CategoryAttribute(EditorCategoryTemplateDictionary.Instance.GetCategoryTitle(MiscellaneousCategoryLabelKey));
            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("DisplayName"), categoryAttribute);
            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("OperationName"), categoryAttribute);
            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("ServiceContractName"), categoryAttribute, new TypeConverterAttribute(typeof(XNameConverter)));
            descriptionAttribute = new DescriptionAttribute(StringResourceDictionary.Instance.GetString("messagingValueHint", "<Value to bind>"));
            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("Content"), categoryAttribute, descriptionAttribute, PropertyValueEditor.CreateEditorAttribute(typeof(ReceiveContentPropertyEditor)));

            var advancedAttribute = new EditorBrowsableAttribute(EditorBrowsableState.Advanced);

            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("Action"), advancedAttribute, categoryAttribute);
            builder.AddCustomAttributes(
                receiveType,
                "KnownTypes",
                advancedAttribute,
                categoryAttribute,
                PropertyValueEditor.CreateEditorAttribute(typeof(TypeCollectionPropertyEditor)),
                new EditorOptionAttribute {
                Name = TypeCollectionPropertyEditor.AllowDuplicate, Value = false
            });

            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("ProtectionLevel"), advancedAttribute, categoryAttribute);
            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("SerializerOption"), advancedAttribute, categoryAttribute);
            builder.AddCustomAttributes(receiveType, receiveType.GetProperty("CanCreateInstance"), advancedAttribute, categoryAttribute);

            Action = receiveType.GetProperty("Action").Name;

            Type receiveMessageContentType = typeof(ReceiveMessageContent);

            Message             = receiveMessageContentType.GetProperty("Message").Name;
            DeclaredMessageType = receiveMessageContentType.GetProperty("DeclaredMessageType").Name;
            MetadataStore.AddAttributeTable(builder.CreateTable());

            Func <Activity, IEnumerable <ArgumentAccessor> > argumentAccessorGenerator = (activity) => new ArgumentAccessor[]
            {
                new ArgumentAccessor
                {
                    Getter = (ownerActivity) =>
                    {
                        Receive receive = (Receive)ownerActivity;
                        ReceiveMessageContent content = receive.Content as ReceiveMessageContent;
                        return(content != null ? content.Message : null);
                    },
                    Setter = (ownerActivity, arg) =>
                    {
                        Receive receive = (Receive)ownerActivity;
                        ReceiveMessageContent content = receive.Content as ReceiveMessageContent;
                        if (content != null)
                        {
                            content.Message = arg as OutArgument;
                        }
                    },
                },
            };

            ActivityArgumentHelper.RegisterAccessorsGenerator(receiveType, argumentAccessorGenerator);
        }