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
- ButtonBaseAutomationPeer.cs
- OAVariantLib.cs
- TracingConnectionInitiator.cs
- DataListItem.cs
- ComPlusDiagnosticTraceSchemas.cs
- DateTimeUtil.cs
- ManifestSignatureInformation.cs
- DesignerDataParameter.cs
- DocumentViewerBaseAutomationPeer.cs
- AssertFilter.cs
- JsonQNameDataContract.cs
- TraceSection.cs
- AdPostCacheSubstitution.cs
- WebPartUtil.cs
- DeclarativeCatalogPart.cs
- ReadOnlyAttribute.cs
- KnownTypes.cs
- DSASignatureDeformatter.cs
- BidPrivateBase.cs
- ProfilePropertyNameValidator.cs
- HttpDigestClientCredential.cs
- IChannel.cs
- SequentialWorkflowHeaderFooter.cs
- DragSelectionMessageFilter.cs
- BitmapEffectInput.cs
- WebAdminConfigurationHelper.cs
- COAUTHIDENTITY.cs
- OleDbConnectionInternal.cs
- RectValueSerializer.cs
- SettingsPropertyWrongTypeException.cs
- DoubleConverter.cs
- Win32SafeHandles.cs
- PersonalizableAttribute.cs
- Section.cs
- SelectorAutomationPeer.cs
- EventWaitHandleSecurity.cs
- SoapInteropTypes.cs
- KoreanLunisolarCalendar.cs
- ContentElementAutomationPeer.cs
- InternalPermissions.cs
- ResourcePool.cs
- GridLengthConverter.cs
- SecurityTokenRequirement.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- DefaultAutoFieldGenerator.cs
- ObjectSet.cs
- TriggerActionCollection.cs
- FormViewModeEventArgs.cs
- Graph.cs
- JsonFormatWriterGenerator.cs
- Perspective.cs
- SqlCacheDependencySection.cs
- ScaleTransform3D.cs
- _emptywebproxy.cs
- SortedDictionary.cs
- AxHost.cs
- FontUnitConverter.cs
- PatternMatcher.cs
- RemotingHelper.cs
- CatalogPartCollection.cs
- PageCatalogPart.cs
- ItemChangedEventArgs.cs
- CollaborationHelperFunctions.cs
- SystemColors.cs
- FunctionDescription.cs
- TrustLevelCollection.cs
- safelink.cs
- MemberNameValidator.cs
- XmlCharacterData.cs
- ProfileGroupSettings.cs
- CustomCredentialPolicy.cs
- FileInfo.cs
- ArraySortHelper.cs
- ScriptingScriptResourceHandlerSection.cs
- Viewport3DAutomationPeer.cs
- ErrorHandler.cs
- MarshalByRefObject.cs
- OrderedDictionary.cs
- basevalidator.cs
- DecoderNLS.cs
- TablePatternIdentifiers.cs
- ExpressionBindingCollection.cs
- EventLogPropertySelector.cs
- Annotation.cs
- WebPartActionVerb.cs
- ComplusTypeValidator.cs
- EnterpriseServicesHelper.cs
- XhtmlBasicLinkAdapter.cs
- EventHandlersStore.cs
- ModuleBuilderData.cs
- XPathScanner.cs
- GridToolTip.cs
- XmlSchemaAppInfo.cs
- DataGridClipboardCellContent.cs
- ProxySimple.cs
- PhysicalAddress.cs
- DbConnectionClosed.cs
- XPathNodeInfoAtom.cs
- MinMaxParagraphWidth.cs
- updateconfighost.cs