Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Statements / MethodExecutor.cs / 1305376 / MethodExecutor.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Statements { using System; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Runtime; // Inverted Template Method pattern. MethodExecutor is the base class for executing a method; created by MethodResolver. // Private concrete implementations are created by MethodResolver, but this is the "public" API used by InvokeMethod. abstract class MethodExecutor { // Used for creating tracing messages w/ DisplayName Activity invokingActivity; // We may still need to know targetType if we're autocreating targets during ExecuteMethod Type targetType; InArgument targetObject; Collectionparameters; RuntimeArgument returnObject; public MethodExecutor(Activity invokingActivity, Type targetType, InArgument targetObject, Collection parameters, RuntimeArgument returnObject) { Fx.Assert(invokingActivity != null, "Must provide invokingActivity"); Fx.Assert(targetType != null || (targetObject != null), "Must provide targetType or targetObject"); Fx.Assert(parameters != null, "Must provide parameters"); // returnObject is optional this.invokingActivity = invokingActivity; this.targetType = targetType; this.targetObject = targetObject; this.parameters = parameters; this.returnObject = returnObject; } public abstract bool MethodIsStatic { get; } protected abstract IAsyncResult BeginMakeMethodCall(AsyncCodeActivityContext context, object target, AsyncCallback callback, object state); protected abstract void EndMakeMethodCall(AsyncCodeActivityContext context, IAsyncResult result); static bool HaveParameterArray(ParameterInfo[] parameters) { if (parameters.Length > 0) { ParameterInfo last = parameters[parameters.Length - 1]; return last.GetCustomAttributes(typeof(ParamArrayAttribute), true).GetLength(0) > 0; } else { return false; } } protected object[] EvaluateAndPackParameters(CodeActivityContext context, MethodInfo method, bool usingAsyncPattern) { ParameterInfo[] formalParameters = method.GetParameters(); int formalParamCount = formalParameters.Length; object[] actualParameters = new object[formalParamCount]; if (usingAsyncPattern) { formalParamCount -= 2; } bool haveParameterArray = HaveParameterArray(formalParameters); for (int i = 0; i < formalParamCount; i++) { if (i == formalParamCount - 1 && !usingAsyncPattern && haveParameterArray) { int paramArrayCount = this.parameters.Count - formalParamCount + 1; // If params are given explicitly, that's okay. if (paramArrayCount == 1 && TypeHelper.AreTypesCompatible(this.parameters[i].ArgumentType, formalParameters[i].ParameterType)) { actualParameters[i] = this.parameters[i].Get
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EntityModelBuildProvider.cs
- InitializerFacet.cs
- sqlcontext.cs
- SqlParameter.cs
- FontWeights.cs
- EmptyStringExpandableObjectConverter.cs
- ParallelEnumerable.cs
- CustomAttribute.cs
- FileInfo.cs
- StoreItemCollection.cs
- ReadOnlyMetadataCollection.cs
- RotateTransform3D.cs
- Condition.cs
- Aes.cs
- ArrayConverter.cs
- InvokePatternIdentifiers.cs
- FloaterBaseParaClient.cs
- ResourceContainer.cs
- DataGridViewCellStateChangedEventArgs.cs
- DbDataSourceEnumerator.cs
- DataSourceSelectArguments.cs
- TemplatePartAttribute.cs
- ActivityStateQuery.cs
- SectionVisual.cs
- ToolBarButtonClickEvent.cs
- RegexCode.cs
- XmlNamespaceMapping.cs
- Error.cs
- QueryCursorEventArgs.cs
- localization.cs
- BitmapEffectDrawingContextWalker.cs
- FixedFlowMap.cs
- CodeSnippetCompileUnit.cs
- NamedPermissionSet.cs
- TimeoutException.cs
- XmlSchemaResource.cs
- StrokeDescriptor.cs
- StrokeNodeEnumerator.cs
- DateTimePicker.cs
- FormattedText.cs
- MatrixCamera.cs
- SrgsDocumentParser.cs
- RequiredFieldValidator.cs
- CriticalHandle.cs
- XmlNavigatorFilter.cs
- ClientBuildManagerCallback.cs
- HttpStaticObjectsCollectionBase.cs
- Shared.cs
- RIPEMD160.cs
- X509ChainElement.cs
- Misc.cs
- DataSourceControl.cs
- X509CertificateStore.cs
- ImageField.cs
- ReflectionServiceProvider.cs
- ContentValidator.cs
- Frame.cs
- RelatedEnd.cs
- DispatcherExceptionFilterEventArgs.cs
- DbXmlEnabledProviderManifest.cs
- FormViewPageEventArgs.cs
- DynamicResourceExtension.cs
- EncryptedXml.cs
- AspNetCompatibilityRequirementsAttribute.cs
- XmlWriterSettings.cs
- RowsCopiedEventArgs.cs
- EllipseGeometry.cs
- VerificationException.cs
- EditingCoordinator.cs
- DataGridViewCellParsingEventArgs.cs
- ScalarType.cs
- StandardToolWindows.cs
- AssemblyBuilder.cs
- DataBindingExpressionBuilder.cs
- CodeDesigner.cs
- IPGlobalProperties.cs
- WindowsListViewItemStartMenu.cs
- FieldMetadata.cs
- ResourceManagerWrapper.cs
- SqlDataSourceCache.cs
- LayoutTableCell.cs
- AlignmentYValidation.cs
- ScriptManager.cs
- Nullable.cs
- XmlSchemaAppInfo.cs
- SrgsRulesCollection.cs
- DocumentViewer.cs
- PackageFilter.cs
- SQLDateTime.cs
- AccessedThroughPropertyAttribute.cs
- ToolStripSeparatorRenderEventArgs.cs
- Frame.cs
- AddInSegmentDirectoryNotFoundException.cs
- Label.cs
- LinearKeyFrames.cs
- MetaModel.cs
- XmlSecureResolver.cs
- CompilerCollection.cs
- MethodExecutor.cs
- VideoDrawing.cs