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
- WebControlsSection.cs
- PropertyGrid.cs
- XPathDescendantIterator.cs
- AvTrace.cs
- PropertyMetadata.cs
- Viewport3DAutomationPeer.cs
- PropertyDescriptorComparer.cs
- SelectionRangeConverter.cs
- DataGridViewHeaderCell.cs
- InvokeProviderWrapper.cs
- LoadWorkflowByInstanceKeyCommand.cs
- DataException.cs
- WebPartMenu.cs
- dsa.cs
- WindowsGraphics2.cs
- PageThemeCodeDomTreeGenerator.cs
- Lasso.cs
- KeyGestureValueSerializer.cs
- RSAOAEPKeyExchangeFormatter.cs
- FileUpload.cs
- HttpListenerRequest.cs
- MobileControlsSection.cs
- GrammarBuilder.cs
- MultiPropertyDescriptorGridEntry.cs
- UnsafePeerToPeerMethods.cs
- SoapProtocolReflector.cs
- ToolStripRenderEventArgs.cs
- ObjectListCommandsPage.cs
- NavigationService.cs
- WebPartTransformerAttribute.cs
- HttpCacheParams.cs
- SafeHandle.cs
- DataRecord.cs
- PropertyGridEditorPart.cs
- Gdiplus.cs
- AppModelKnownContentFactory.cs
- AssemblyNameProxy.cs
- _NestedSingleAsyncResult.cs
- InternalMappingException.cs
- TemplateColumn.cs
- WebColorConverter.cs
- TemplateNameScope.cs
- Rect.cs
- TableRowCollection.cs
- TextRangeAdaptor.cs
- CodeDirectoryCompiler.cs
- IisNotInstalledException.cs
- CodeDOMUtility.cs
- XmlSchemaAttributeGroup.cs
- DbUpdateCommandTree.cs
- SortQuery.cs
- ContentPropertyAttribute.cs
- activationcontext.cs
- XmlSchemaProviderAttribute.cs
- SemaphoreSecurity.cs
- FunctionMappingTranslator.cs
- GrammarBuilderRuleRef.cs
- HttpClientProtocol.cs
- WebPartConnectionsCloseVerb.cs
- FileDialog_Vista_Interop.cs
- ResourceSet.cs
- ByteKeyFrameCollection.cs
- AddInAdapter.cs
- WebServicesInteroperability.cs
- DynamicDataExtensions.cs
- WebConfigurationHost.cs
- NativeWrapper.cs
- WebPartEditorOkVerb.cs
- SecurityPermission.cs
- BitArray.cs
- EventInfo.cs
- DesignTimeSiteMapProvider.cs
- TextModifier.cs
- Encoder.cs
- PTProvider.cs
- XmlAnyElementAttribute.cs
- ContentType.cs
- SplitContainerDesigner.cs
- StringFormat.cs
- ObjectQuery.cs
- DataView.cs
- BrowserCapabilitiesCompiler.cs
- QueryCacheEntry.cs
- ParserHooks.cs
- ServiceChannelFactory.cs
- ScrollEvent.cs
- ChtmlTextWriter.cs
- CompiledIdentityConstraint.cs
- ClientSettingsSection.cs
- QueryOutputWriter.cs
- SynchronizedInputHelper.cs
- MappingModelBuildProvider.cs
- DataTableMapping.cs
- BitmapImage.cs
- sitestring.cs
- RadioButtonAutomationPeer.cs
- XComponentModel.cs
- TaskFileService.cs
- PageRequestManager.cs
- BlockCollection.cs