Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx35 / System.WorkflowServices / System / Workflow / Runtime / WorkflowDefinitionContext.cs / 1305376 / WorkflowDefinitionContext.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.Workflow.Runtime
{
using System.ComponentModel.Design;
using System.Reflection;
using System.Runtime;
using System.ServiceModel;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Compiler;
abstract class WorkflowDefinitionContext
{
WorkflowRuntime workflowRuntime;
public abstract string ConfigurationName
{
get;
}
public abstract string WorkflowName
{
get;
}
internal protected WorkflowRuntime WorkflowRuntime
{
get
{
Fx.Assert(this.workflowRuntime != null, "Attempt to call WorkflowRuntime before Register");
return this.workflowRuntime;
}
}
public abstract WorkflowInstance CreateWorkflow();
public abstract WorkflowInstance CreateWorkflow(Guid instanceId);
public abstract Activity GetWorkflowDefinition();
internal void Register(WorkflowRuntime workflowRuntime, bool validate)
{
if (workflowRuntime == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("workflowRuntime");
}
this.workflowRuntime = workflowRuntime;
OnRegister();
if (!this.workflowRuntime.IsStarted)
{
this.workflowRuntime.StartRuntime();
}
if (validate)
{
ValidateDefinition();
}
}
protected static TypeProvider CreateTypeProvider(Activity rootActivity)
{
TypeProvider typeProvider = new TypeProvider(null);
Type companionType = rootActivity.GetType();
typeProvider.SetLocalAssembly(companionType.Assembly);
typeProvider.AddAssembly(companionType.Assembly);
foreach (AssemblyName assemblyName in companionType.Assembly.GetReferencedAssemblies())
{
Assembly referencedAssembly = null;
try
{
referencedAssembly = Assembly.Load(assemblyName);
if (referencedAssembly != null)
{
typeProvider.AddAssembly(referencedAssembly);
}
}
catch (Exception e)
{
if (Fx.IsFatal(e))
{
throw;
}
}
if (referencedAssembly == null && assemblyName.CodeBase != null)
{
typeProvider.AddAssemblyReference(assemblyName.CodeBase);
}
}
return typeProvider;
}
protected abstract void OnRegister();
protected abstract void OnValidate(ValidationErrorCollection errors);
void ValidateDefinition()
{
ValidationErrorCollection errors = new ValidationErrorCollection();
Activity rootActivity = GetWorkflowDefinition();
ITypeProvider typeProvider = CreateTypeProvider(rootActivity);
ServiceContainer serviceContainer = new ServiceContainer();
serviceContainer.AddService(typeof(ITypeProvider), typeProvider);
ValidationManager validationManager = new ValidationManager(serviceContainer);
foreach (Validator validator in validationManager.GetValidators(rootActivity.GetType()))
{
foreach (ValidationError error in validator.Validate(validationManager, rootActivity))
{
if (!error.UserData.Contains(typeof(Activity)))
{
error.UserData[typeof(Activity)] = rootActivity;
}
errors.Add(error);
}
}
OnValidate(errors);
if (errors.HasErrors)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new WorkflowValidationFailedException(SR2.WorkflowValidationFailed, errors));
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EventDescriptor.cs
- DnsPermission.cs
- IndentTextWriter.cs
- SrgsSubset.cs
- CreateParams.cs
- CollectionViewGroup.cs
- DbException.cs
- StateMachineAction.cs
- StandardCommands.cs
- BasePropertyDescriptor.cs
- TypeCacheManager.cs
- DetailsViewPagerRow.cs
- ExtensionDataObject.cs
- AttachedAnnotationChangedEventArgs.cs
- TextDecorationCollection.cs
- ListViewCommandEventArgs.cs
- WebPartConnectionsCancelVerb.cs
- XmlSchemaComplexContent.cs
- EditorPart.cs
- Int16Animation.cs
- ApplicationId.cs
- RenderData.cs
- CountAggregationOperator.cs
- TextProperties.cs
- TaskFileService.cs
- Canonicalizers.cs
- MasterPageBuildProvider.cs
- Crypto.cs
- propertyentry.cs
- InputMethodStateTypeInfo.cs
- Constraint.cs
- NavigationHelper.cs
- TypeResolver.cs
- SqlNode.cs
- PathSegmentCollection.cs
- XmlSerializationWriter.cs
- DbConnectionPoolGroupProviderInfo.cs
- FreezableOperations.cs
- DataGridParentRows.cs
- SafeRightsManagementHandle.cs
- TypeConverterValueSerializer.cs
- CompositeTypefaceMetrics.cs
- ConnectionString.cs
- AvTraceDetails.cs
- WebPartEditorCancelVerb.cs
- ServerValidateEventArgs.cs
- RegexWorker.cs
- PrePostDescendentsWalker.cs
- ReadOnlyObservableCollection.cs
- OutKeywords.cs
- Themes.cs
- AutomationProperties.cs
- XamlToRtfWriter.cs
- TraceContextRecord.cs
- ObjectSpanRewriter.cs
- MergablePropertyAttribute.cs
- StructuralObject.cs
- SqlBinder.cs
- Mappings.cs
- _BaseOverlappedAsyncResult.cs
- ConvertEvent.cs
- FieldNameLookup.cs
- MsmqHostedTransportManager.cs
- StringKeyFrameCollection.cs
- FilteredDataSetHelper.cs
- DataContext.cs
- XmlSchemaCompilationSettings.cs
- basenumberconverter.cs
- ListViewDeleteEventArgs.cs
- EventSinkActivity.cs
- StringInfo.cs
- localization.cs
- ChildrenQuery.cs
- HtmlMeta.cs
- ScriptResourceInfo.cs
- BinaryUtilClasses.cs
- PkcsMisc.cs
- Decorator.cs
- XmlWellformedWriter.cs
- BoolExpression.cs
- TileBrush.cs
- PageCatalogPart.cs
- HasCopySemanticsAttribute.cs
- MimeXmlReflector.cs
- ValueCollectionParameterReader.cs
- InvokeHandlers.cs
- MDIControlStrip.cs
- CharAnimationUsingKeyFrames.cs
- MethodBody.cs
- SQLDateTime.cs
- sortedlist.cs
- PaintValueEventArgs.cs
- RectConverter.cs
- SafeNativeMethods.cs
- ComponentEditorPage.cs
- SQLBytes.cs
- Triplet.cs
- EntityContainer.cs
- JulianCalendar.cs
- HashMembershipCondition.cs