88 lines
3.7 KiB
C#
88 lines
3.7 KiB
C#
|
#region Imports
|
||
|
|
||
|
using System;
|
||
|
using System.Diagnostics;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Xml;
|
||
|
using System.Text;
|
||
|
using System.IO;
|
||
|
using System.ComponentModel.Design;
|
||
|
using System.ComponentModel.Design.Serialization;
|
||
|
using System.Workflow.ComponentModel;
|
||
|
using System.Workflow.ComponentModel.Compiler;
|
||
|
using System.Workflow.ComponentModel.Serialization;
|
||
|
using System.Workflow.ComponentModel.Design;
|
||
|
using System.Workflow.Runtime;
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
|
||
|
namespace System.Workflow.Runtime.Hosting
|
||
|
{
|
||
|
|
||
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
||
|
public class DefaultWorkflowLoaderService : WorkflowLoaderService
|
||
|
{
|
||
|
protected internal override Activity CreateInstance(Type workflowType)
|
||
|
{
|
||
|
if (workflowType == null)
|
||
|
throw new ArgumentNullException("workflowType");
|
||
|
|
||
|
if (!typeof(Activity).IsAssignableFrom(workflowType))
|
||
|
throw new ArgumentException(ExecutionStringManager.TypeMustImplementRootActivity);
|
||
|
|
||
|
if (workflowType.GetConstructor(System.Type.EmptyTypes) == null)
|
||
|
throw new ArgumentException(ExecutionStringManager.TypeMustHavePublicDefaultConstructor);
|
||
|
|
||
|
return Activator.CreateInstance(workflowType) as Activity;
|
||
|
}
|
||
|
|
||
|
// This function will create a new root activity definition tree by deserializing the xoml and the rules file.
|
||
|
protected internal override Activity CreateInstance(XmlReader workflowDefinitionReader, XmlReader rulesReader)
|
||
|
{
|
||
|
if (workflowDefinitionReader == null)
|
||
|
throw new ArgumentNullException("workflowDefinitionReader");
|
||
|
|
||
|
Activity root = null;
|
||
|
ValidationErrorCollection errors = new ValidationErrorCollection();
|
||
|
ServiceContainer serviceContainer = new ServiceContainer();
|
||
|
ITypeProvider typeProvider = this.Runtime.GetService<ITypeProvider>();
|
||
|
if (typeProvider != null)
|
||
|
serviceContainer.AddService(typeof(ITypeProvider), typeProvider);
|
||
|
|
||
|
DesignerSerializationManager manager = new DesignerSerializationManager(serviceContainer);
|
||
|
try
|
||
|
{
|
||
|
using (manager.CreateSession())
|
||
|
{
|
||
|
WorkflowMarkupSerializationManager xomlSerializationManager = new WorkflowMarkupSerializationManager(manager);
|
||
|
root = new WorkflowMarkupSerializer().Deserialize(xomlSerializationManager, workflowDefinitionReader) as Activity;
|
||
|
if (root != null && rulesReader != null)
|
||
|
{
|
||
|
object rules = new WorkflowMarkupSerializer().Deserialize(xomlSerializationManager, rulesReader);
|
||
|
root.SetValue(ConditionTypeConverter.DeclarativeConditionDynamicProp, rules);
|
||
|
}
|
||
|
|
||
|
foreach (object error in manager.Errors)
|
||
|
{
|
||
|
if (error is WorkflowMarkupSerializationException)
|
||
|
errors.Add(new ValidationError(((WorkflowMarkupSerializationException)error).Message, ErrorNumbers.Error_SerializationError));
|
||
|
else
|
||
|
errors.Add(new ValidationError(error.ToString(), ErrorNumbers.Error_SerializationError));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
errors.Add(new ValidationError(e.Message, ErrorNumbers.Error_SerializationError));
|
||
|
}
|
||
|
|
||
|
if (errors.HasErrors)
|
||
|
throw new WorkflowValidationFailedException(ExecutionStringManager.WorkflowValidationFailure, errors);
|
||
|
|
||
|
return root;
|
||
|
}
|
||
|
}
|
||
|
}
|