Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / ActivityContext.cs / 1305376 / ActivityContext.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities { using System; using System.Activities.Runtime; using System.Activities.Tracking; using System.Diagnostics.CodeAnalysis; using System.Runtime; [Fx.Tag.XamlVisible(false)] public class ActivityContext { ActivityInstance instance; ActivityExecutor executor; bool isDisposed; // Used by subclasses that are pooled. internal ActivityContext() { } // these can only be created by the WF Runtime internal ActivityContext(ActivityInstance instance, ActivityExecutor executor) { Fx.Assert(instance != null, "valid activity instance is required"); this.instance = instance; this.executor = executor; this.Activity = this.instance.Activity; } internal LocationEnvironment Environment { get { ThrowIfDisposed(); return this.instance.Environment; } } internal bool AllowChainedEnvironmentAccess { get; set; } internal Activity Activity { get; set; } internal ActivityInstance CurrentInstance { get { return this.instance; } } public string ActivityInstanceId { get { ThrowIfDisposed(); return this.instance.Id; } } public Guid WorkflowInstanceId { get { ThrowIfDisposed(); return this.executor.WorkflowInstanceId; } } public WorkflowDataContext DataContext { get { ThrowIfDisposed(); if (this.instance.DataContext == null) { this.instance.DataContext = new WorkflowDataContext(this.executor, this.instance); } return this.instance.DataContext; } } internal bool IsDisposed { get { return this.isDisposed; } } public T GetExtension() where T : class { ThrowIfDisposed(); return this.executor.GetExtension (); } internal void Reinitialize(ActivityInstance instance, ActivityExecutor executor) { this.isDisposed = false; this.instance = instance; this.executor = executor; this.Activity = this.instance.Activity; } // extra insurance against misuse (if someone stashes away the execution context to use later) internal void Dispose() { this.isDisposed = true; this.instance = null; this.executor = null; this.Activity = null; } // Soft-Link: This method is referenced through reflection by // ExpressionUtilities.TryRewriteLambdaExpression. Update that // file if the signature changes. public Location GetLocation (LocationReference locationReference) { ThrowIfDisposed(); if (locationReference == null) { throw FxTrace.Exception.ArgumentNull("locationReference"); } Location location = locationReference.GetLocation(this); Location typedLocation = location as Location ; if (typedLocation != null) { return typedLocation; } else { Fx.Assert(location != null, "The contract of LocationReference is that GetLocation never returns null."); if (locationReference.Type == typeof(T)) { return new TypedLocationWrapper (location); } else { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.LocationTypeMismatch(locationReference.Name, typeof(T), locationReference.Type))); } } } // Soft-Link: This method is referenced through reflection by // ExpressionUtilities.TryRewriteLambdaExpression. Update that // file if the signature changes. public T GetValue (LocationReference locationReference) { ThrowIfDisposed(); if (locationReference == null) { throw FxTrace.Exception.ArgumentNull("locationReference"); } return GetValueCore (locationReference); } internal T GetValueCore (LocationReference locationReference) { Location location = locationReference.GetLocation(this); Location typedLocation = location as Location ; if (typedLocation != null) { // If we hit this path we can avoid boxing value types return typedLocation.Value; } else { Fx.Assert(location != null, "The contract of LocationReference is that GetLocation never returns null."); return TypeHelper.Convert (location.Value); } } public void SetValue (LocationReference locationReference, T value) { ThrowIfDisposed(); if (locationReference == null) { throw FxTrace.Exception.ArgumentNull("locationReference"); } SetValueCore (locationReference, value); } internal void SetValueCore (LocationReference locationReference, T value) { Location location = locationReference.GetLocation(this); Location typedLocation = location as Location ; if (typedLocation != null) { // If we hit this path we can avoid boxing value types typedLocation.Value = value; } else { if (!TypeHelper.AreTypesCompatible(value, locationReference.Type)) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.CannotSetValueToLocation(value != null ? value.GetType() : typeof(T), locationReference.Name, locationReference.Type))); } location.Value = value; } } // Soft-Link: This method is referenced through reflection by // ExpressionUtilities.TryRewriteLambdaExpression. Update that // file if the signature changes. [SuppressMessage(FxCop.Category.Design, FxCop.Rule.ConsiderPassingBaseTypesAsParameters, Justification = "Generic needed for type inference")] public T GetValue (OutArgument argument) { ThrowIfDisposed(); if (argument == null) { throw FxTrace.Exception.ArgumentNull("argument"); } argument.ThrowIfNotInTree(); return GetValueCore (argument.RuntimeArgument); } // Soft-Link: This method is referenced through reflection by // ExpressionUtilities.TryRewriteLambdaExpression. Update that // file if the signature changes. [SuppressMessage(FxCop.Category.Design, FxCop.Rule.ConsiderPassingBaseTypesAsParameters, Justification = "Generic needed for type inference")] public T GetValue (InOutArgument argument) { ThrowIfDisposed(); if (argument == null) { throw FxTrace.Exception.ArgumentNull("argument"); } argument.ThrowIfNotInTree(); return GetValueCore (argument.RuntimeArgument); } // Soft-Link: This method is referenced through reflection by // ExpressionUtilities.TryRewriteLambdaExpression. Update that // file if the signature changes. [SuppressMessage(FxCop.Category.Design, FxCop.Rule.ConsiderPassingBaseTypesAsParameters, Justification = "Generic needed for type inference")] public T GetValue (InArgument argument) { ThrowIfDisposed(); if (argument == null) { throw FxTrace.Exception.ArgumentNull("argument"); } argument.ThrowIfNotInTree(); return GetValueCore (argument.RuntimeArgument); } // Soft-Link: This method is referenced through reflection by // ExpressionUtilities.TryRewriteLambdaExpression. Update that // file if the signature changes. public object GetValue(Argument argument) { ThrowIfDisposed(); if (argument == null) { throw FxTrace.Exception.ArgumentNull("argument"); } argument.ThrowIfNotInTree(); return GetValueCore
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FixedTextContainer.cs
- HiddenFieldPageStatePersister.cs
- BinHexDecoder.cs
- sortedlist.cs
- _ListenerRequestStream.cs
- PipelineModuleStepContainer.cs
- DataSourceControl.cs
- WeakKeyDictionary.cs
- WindowsServiceCredential.cs
- JavascriptCallbackMessageInspector.cs
- EventSinkActivityDesigner.cs
- ListViewItem.cs
- SpellerError.cs
- Decoder.cs
- ClientRuntimeConfig.cs
- AttributeProviderAttribute.cs
- OdbcCommand.cs
- DataServiceHost.cs
- FloaterParaClient.cs
- Fx.cs
- Accessors.cs
- UrlPath.cs
- HTMLTextWriter.cs
- ReachBasicContext.cs
- ProcessThread.cs
- EntityProviderServices.cs
- SafeFileMapViewHandle.cs
- TraceListener.cs
- EmptyControlCollection.cs
- StringComparer.cs
- ToolStripContainer.cs
- ChangeBlockUndoRecord.cs
- OleDbTransaction.cs
- Timer.cs
- ActivationProxy.cs
- TemplateContainer.cs
- ParameterCollection.cs
- Timeline.cs
- EditorResources.cs
- CompilerErrorCollection.cs
- SerializableAttribute.cs
- DataSourceSelectArguments.cs
- RequestCachePolicyConverter.cs
- XmlBinaryReaderSession.cs
- InstancePersistence.cs
- SchemaImporterExtensionElement.cs
- Query.cs
- DataBoundControlAdapter.cs
- MD5.cs
- TaskDesigner.cs
- DecoderReplacementFallback.cs
- AnnotationComponentChooser.cs
- AssertUtility.cs
- DbConnectionInternal.cs
- AnnotationAdorner.cs
- RandomDelayQueuedSendsAsyncResult.cs
- ProfileManager.cs
- SerializationAttributes.cs
- XmlTypeMapping.cs
- SafeThemeHandle.cs
- ExternalException.cs
- DeflateEmulationStream.cs
- BitmapEffectDrawingContent.cs
- SmiSettersStream.cs
- PrintPageEvent.cs
- DragEvent.cs
- Track.cs
- DelegatingTypeDescriptionProvider.cs
- ListenerAdapter.cs
- RightsManagementSuppressedStream.cs
- WindowsSlider.cs
- NumberFormatter.cs
- Monitor.cs
- PolyQuadraticBezierSegment.cs
- ToolStripDropDownClosingEventArgs.cs
- CqlLexer.cs
- DeclarativeCatalogPart.cs
- QilParameter.cs
- DockPatternIdentifiers.cs
- PixelFormat.cs
- DataGridColumnHeaderCollection.cs
- Container.cs
- KnownTypesProvider.cs
- SqlAliasesReferenced.cs
- LinqDataSourceEditData.cs
- ExpandableObjectConverter.cs
- Mutex.cs
- UpdateExpressionVisitor.cs
- CodeAccessPermission.cs
- ChildTable.cs
- ObjectContext.cs
- TableItemPatternIdentifiers.cs
- XamlTemplateSerializer.cs
- NullReferenceException.cs
- TreeNodeConverter.cs
- Animatable.cs
- RenderCapability.cs
- Documentation.cs
- TargetFrameworkAttribute.cs
- XmlSecureResolver.cs