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
- TreeNode.cs
- PrintingPermissionAttribute.cs
- Brush.cs
- XmlStrings.cs
- OneWayBindingElementImporter.cs
- RadioButtonStandardAdapter.cs
- TabPage.cs
- FixedLineResult.cs
- CheckedListBox.cs
- NativeConfigurationLoader.cs
- EntityCodeGenerator.cs
- ReceiveReply.cs
- SourceInterpreter.cs
- ConfigPathUtility.cs
- DataGridViewTextBoxColumn.cs
- TypeConstant.cs
- SessionPageStatePersister.cs
- LoginView.cs
- XmlSchemaSequence.cs
- SqlAggregateChecker.cs
- X509ChainPolicy.cs
- SystemTcpStatistics.cs
- SqlTriggerContext.cs
- AssociatedControlConverter.cs
- WebChannelFactory.cs
- SystemGatewayIPAddressInformation.cs
- ToolStripMenuItem.cs
- EventLogRecord.cs
- DataExchangeServiceBinder.cs
- StateRuntime.cs
- CodeSnippetExpression.cs
- StaticSiteMapProvider.cs
- LeftCellWrapper.cs
- ToolConsole.cs
- OutputScopeManager.cs
- CroppedBitmap.cs
- CustomWebEventKey.cs
- Gdiplus.cs
- TableLayoutSettingsTypeConverter.cs
- StagingAreaInputItem.cs
- BaseUriWithWildcard.cs
- ToolStripPanelCell.cs
- WebResponse.cs
- XsdCachingReader.cs
- Divide.cs
- PtsHelper.cs
- MD5HashHelper.cs
- EditorZone.cs
- UnsafeNativeMethods.cs
- WizardPanelChangingEventArgs.cs
- NGCPageContentSerializerAsync.cs
- TrackingMemoryStreamFactory.cs
- TargetPerspective.cs
- EntityDataSourceDataSelectionPanel.designer.cs
- SystemIPInterfaceStatistics.cs
- OdbcInfoMessageEvent.cs
- Duration.cs
- dataprotectionpermission.cs
- RegistryExceptionHelper.cs
- TypeElement.cs
- Container.cs
- Compensate.cs
- AnonymousIdentificationSection.cs
- ObjectViewFactory.cs
- SpoolingTaskBase.cs
- FamilyMap.cs
- Scalars.cs
- TraceUtils.cs
- ApplicationDirectoryMembershipCondition.cs
- SplitterPanel.cs
- ZipIOBlockManager.cs
- SAPIEngineTypes.cs
- CharStorage.cs
- LinqDataSourceUpdateEventArgs.cs
- StringUtil.cs
- WebReferenceOptions.cs
- HttpModuleAction.cs
- PropertyDescriptorComparer.cs
- DbFunctionCommandTree.cs
- ClickablePoint.cs
- ValueChangedEventManager.cs
- Token.cs
- ViewgenGatekeeper.cs
- FileSecurity.cs
- FontWeight.cs
- X509Extension.cs
- ObjectListGeneralPage.cs
- AnonymousIdentificationModule.cs
- SingleSelectRootGridEntry.cs
- FullTextState.cs
- MarkupWriter.cs
- DependencyProperty.cs
- Pts.cs
- RubberbandSelector.cs
- SafeUserTokenHandle.cs
- MulticastIPAddressInformationCollection.cs
- OpCellTreeNode.cs
- activationcontext.cs
- ImplicitInputBrush.cs
- PermissionSetTriple.cs