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
- WebServiceErrorEvent.cs
- XPathMessageFilterTable.cs
- IList.cs
- VisualStateManager.cs
- X509UI.cs
- DbProviderFactories.cs
- ClientSideProviderDescription.cs
- SqlWebEventProvider.cs
- X509CertificateRecipientClientCredential.cs
- PenCursorManager.cs
- CacheEntry.cs
- TextSpanModifier.cs
- EvidenceBase.cs
- SqlDataSourceSelectingEventArgs.cs
- DecimalConstantAttribute.cs
- ApplicationDirectory.cs
- XmlReaderSettings.cs
- ValidatorCollection.cs
- SingleResultAttribute.cs
- PropertySegmentSerializationProvider.cs
- ServiceModelTimeSpanValidator.cs
- WebBrowserSiteBase.cs
- ExecutorLocksHeldException.cs
- TransactionManager.cs
- FormatterServicesNoSerializableCheck.cs
- CornerRadius.cs
- safex509handles.cs
- RuleSet.cs
- PropertyOverridesTypeEditor.cs
- TextBoxBase.cs
- XdrBuilder.cs
- ColumnTypeConverter.cs
- QuaternionAnimation.cs
- XPathArrayIterator.cs
- AssociationSet.cs
- CodeRegionDirective.cs
- TextSpan.cs
- ListViewItem.cs
- WebExceptionStatus.cs
- DelegatingTypeDescriptionProvider.cs
- ObjectListDesigner.cs
- RewritingProcessor.cs
- MetabaseReader.cs
- TextParaClient.cs
- QueryConverter.cs
- loginstatus.cs
- ping.cs
- MarshalDirectiveException.cs
- ChangeNode.cs
- TextTrailingCharacterEllipsis.cs
- LocalServiceSecuritySettings.cs
- TableRowCollection.cs
- MergeFilterQuery.cs
- WebPartZoneBase.cs
- SqlAliaser.cs
- XhtmlBasicTextViewAdapter.cs
- MDIWindowDialog.cs
- Buffer.cs
- RuleSettingsCollection.cs
- HashHelper.cs
- NativeRightsManagementAPIsStructures.cs
- LinqMaximalSubtreeNominator.cs
- CodeDirectoryCompiler.cs
- InputScopeNameConverter.cs
- KeyFrames.cs
- ContextCorrelationInitializer.cs
- XmlNotation.cs
- TemplateBindingExpressionConverter.cs
- HtmlInputSubmit.cs
- XmlEventCache.cs
- DataServiceResponse.cs
- FlowDocumentReader.cs
- Menu.cs
- StringStorage.cs
- DataGridViewSelectedRowCollection.cs
- AdPostCacheSubstitution.cs
- TextTreeTextElementNode.cs
- CryptoStream.cs
- BitmapSource.cs
- CheckBoxRenderer.cs
- LambdaCompiler.Expressions.cs
- NativeMethods.cs
- SiteMapDataSourceDesigner.cs
- EventListener.cs
- ErrorEventArgs.cs
- DataServiceRequest.cs
- SamlSubjectStatement.cs
- InputChannelAcceptor.cs
- DataList.cs
- XmlNodeChangedEventArgs.cs
- StorageModelBuildProvider.cs
- SchemaNamespaceManager.cs
- XmlSerializerSection.cs
- Latin1Encoding.cs
- TextDecoration.cs
- ResolvedKeyFrameEntry.cs
- AttributeCollection.cs
- WebAdminConfigurationHelper.cs
- SafeProcessHandle.cs
- DataGridViewBindingCompleteEventArgs.cs