internal void ValidateDefinition(Activity root, bool isNewType, ITypeProvider typeProvider)
 {
     if (this.validateOnCreate)
     {
         ValidationErrorCollection errors = new ValidationErrorCollection();
         if (typeProvider == null)
         {
             typeProvider = WorkflowRuntime.CreateTypeProvider(root);
         }
         if (!isNewType)
         {
             if (!string.IsNullOrEmpty(root.GetValue(WorkflowMarkupSerializer.XClassProperty) as string))
             {
                 errors.Add(new ValidationError(ExecutionStringManager.XomlWorkflowHasClassName, 0x61c));
             }
             Queue queue = new Queue();
             queue.Enqueue(root);
             while (queue.Count > 0)
             {
                 Activity activity = queue.Dequeue() as Activity;
                 if (activity.GetValue(WorkflowMarkupSerializer.XCodeProperty) != null)
                 {
                     errors.Add(new ValidationError(ExecutionStringManager.XomlWorkflowHasCode, 0x61d));
                 }
                 CompositeActivity activity2 = activity as CompositeActivity;
                 if (activity2 != null)
                 {
                     foreach (Activity activity3 in activity2.EnabledActivities)
                     {
                         queue.Enqueue(activity3);
                     }
                 }
             }
         }
         ServiceContainer serviceProvider = new ServiceContainer();
         serviceProvider.AddService(typeof(ITypeProvider), typeProvider);
         ValidationManager manager = new ValidationManager(serviceProvider);
         using (WorkflowCompilationContext.CreateScope(manager))
         {
             foreach (Validator validator in manager.GetValidators(root.GetType()))
             {
                 foreach (ValidationError error in validator.Validate(manager, root))
                 {
                     if (!error.UserData.Contains(typeof(Activity)))
                     {
                         error.UserData[typeof(Activity)] = root;
                     }
                     errors.Add(error);
                 }
             }
         }
         if (errors.HasErrors)
         {
             throw new WorkflowValidationFailedException(ExecutionStringManager.WorkflowValidationFailure, errors);
         }
     }
 }
コード例 #2
0
        internal void ValidateDefinition(Activity root, bool isNewType, ITypeProvider typeProvider)
        {
            if (!this.validateOnCreate)
            {
                return;
            }

            ValidationErrorCollection errors = new ValidationErrorCollection();

            // For validation purposes, create a type provider in the type case if the
            // host did not push one.
            if (typeProvider == null)
            {
                typeProvider = WorkflowRuntime.CreateTypeProvider(root);
            }

            // Validate that we are purely XAML.
            if (!isNewType)
            {
                if (!string.IsNullOrEmpty(root.GetValue(WorkflowMarkupSerializer.XClassProperty) as string))
                {
                    errors.Add(new ValidationError(ExecutionStringManager.XomlWorkflowHasClassName, ErrorNumbers.Error_XomlWorkflowHasClassName));
                }

                Queue compositeActivities = new Queue();
                compositeActivities.Enqueue(root);
                while (compositeActivities.Count > 0)
                {
                    Activity activity = compositeActivities.Dequeue() as Activity;

                    if (activity.GetValue(WorkflowMarkupSerializer.XCodeProperty) != null)
                    {
                        errors.Add(new ValidationError(ExecutionStringManager.XomlWorkflowHasCode, ErrorNumbers.Error_XomlWorkflowHasCode));
                    }

                    CompositeActivity compositeActivity = activity as CompositeActivity;
                    if (compositeActivity != null)
                    {
                        foreach (Activity childActivity in compositeActivity.EnabledActivities)
                        {
                            compositeActivities.Enqueue(childActivity);
                        }
                    }
                }
            }

            ServiceContainer serviceContainer = new ServiceContainer();

            serviceContainer.AddService(typeof(ITypeProvider), typeProvider);

            ValidationManager validationManager = new ValidationManager(serviceContainer);

            using (WorkflowCompilationContext.CreateScope(validationManager))
            {
                foreach (Validator validator in validationManager.GetValidators(root.GetType()))
                {
                    foreach (ValidationError error in validator.Validate(validationManager, root))
                    {
                        if (!error.UserData.Contains(typeof(Activity)))
                        {
                            error.UserData[typeof(Activity)] = root;
                        }

                        errors.Add(error);
                    }
                }
            }
            if (errors.HasErrors)
            {
                throw new WorkflowValidationFailedException(ExecutionStringManager.WorkflowValidationFailure, errors);
            }
        }