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
- CrossContextChannel.cs
- InertiaTranslationBehavior.cs
- ReflectionHelper.cs
- MatrixCamera.cs
- EdmComplexPropertyAttribute.cs
- SafeTimerHandle.cs
- BulletedList.cs
- CipherData.cs
- ValidatingReaderNodeData.cs
- AttributeQuery.cs
- GenericWebPart.cs
- Vector3D.cs
- EncodingDataItem.cs
- DomNameTable.cs
- ManagementOptions.cs
- WinFormsComponentEditor.cs
- ResourceDictionaryCollection.cs
- SqlDataAdapter.cs
- DSASignatureFormatter.cs
- SqlProviderUtilities.cs
- MsmqTransportElement.cs
- AssemblyFilter.cs
- HelloMessageApril2005.cs
- XamlTypeMapper.cs
- CollectionChangedEventManager.cs
- CollectionView.cs
- SmiEventSink.cs
- CharacterMetrics.cs
- PerformanceCounterPermissionAttribute.cs
- DelegateHelpers.cs
- FileDialogCustomPlace.cs
- AudioDeviceOut.cs
- _DomainName.cs
- DataGridLength.cs
- ProgressBarBrushConverter.cs
- Imaging.cs
- XmlNodeChangedEventArgs.cs
- ImageMetadata.cs
- LinkedResource.cs
- FontNameEditor.cs
- MetadataArtifactLoaderComposite.cs
- FileAuthorizationModule.cs
- WebPartManager.cs
- QilPatternFactory.cs
- PropertyChangedEventArgs.cs
- HttpServerUtilityWrapper.cs
- XPathNodePointer.cs
- StylusShape.cs
- HttpContext.cs
- FormattedTextSymbols.cs
- XhtmlMobileTextWriter.cs
- Nullable.cs
- CommandEventArgs.cs
- NetTcpSecurity.cs
- SemanticBasicElement.cs
- SEHException.cs
- DbTransaction.cs
- DatagridviewDisplayedBandsData.cs
- TargetControlTypeCache.cs
- CapabilitiesState.cs
- BitmapCache.cs
- WebPartUserCapability.cs
- GridView.cs
- LineSegment.cs
- OdbcUtils.cs
- Switch.cs
- DebugView.cs
- TraceContextEventArgs.cs
- File.cs
- Win32KeyboardDevice.cs
- SoapRpcMethodAttribute.cs
- ZipIOExtraFieldElement.cs
- DataListItemEventArgs.cs
- WhitespaceRuleLookup.cs
- DefaultPrintController.cs
- DayRenderEvent.cs
- WebPartMinimizeVerb.cs
- TaskHelper.cs
- AppendHelper.cs
- JavaScriptString.cs
- CodeLabeledStatement.cs
- Literal.cs
- FileRecordSequenceHelper.cs
- ProfileEventArgs.cs
- _CacheStreams.cs
- RegexInterpreter.cs
- HttpProcessUtility.cs
- CodeConditionStatement.cs
- BatchServiceHost.cs
- BrushConverter.cs
- CompilerInfo.cs
- SocketAddress.cs
- CollectionsUtil.cs
- COAUTHINFO.cs
- OperationCanceledException.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- ContainerCodeDomSerializer.cs
- StructuredTypeInfo.cs
- ActivityExecutionFilter.cs
- TraceUtility.cs