Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Expressions / PropertyReference.cs / 1305376 / PropertyReference.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Expressions { using System.ComponentModel; using System.Reflection; using System.Runtime; using System.Runtime.Serialization; public sealed class PropertyReference: CodeActivity > { PropertyInfo propertyInfo; [DefaultValue(null)] public string PropertyName { get; set; } public InArgument Operand { get; set; } protected override void CacheMetadata(CodeActivityMetadata metadata) { bool isRequired = false; if (typeof(TOperand).IsEnum) { metadata.AddValidationError(SR.TargetTypeCannotBeEnum(this.GetType().Name, this.DisplayName)); } else if (typeof(TOperand).IsValueType) { metadata.AddValidationError(SR.TargetTypeIsValueType(this.GetType().Name, this.DisplayName)); } if (string.IsNullOrEmpty(this.PropertyName)) { metadata.AddValidationError(SR.ActivityPropertyMustBeSet("PropertyName", this.DisplayName)); } else { Type operandType = typeof(TOperand); this.propertyInfo = operandType.GetProperty(this.PropertyName); if (this.propertyInfo == null) { metadata.AddValidationError(SR.MemberNotFound(PropertyName, typeof(TOperand).Name)); } else { MethodInfo getMethod = this.propertyInfo.GetGetMethod(); MethodInfo setMethod = this.propertyInfo.GetSetMethod(); // Only allow access to public properties, EXCEPT that Locations are top-level variables // from the other's perspective, not internal properties, so they're okay as a special case. // E.g. "[N]" from the user's perspective is not accessing a nonpublic property, even though // at an implementation level it is. if (setMethod == null && TypeHelper.AreTypesCompatible(this.propertyInfo.DeclaringType, typeof(Location)) == false) { metadata.AddValidationError(SR.ReadonlyPropertyCannotBeSet(this.propertyInfo.DeclaringType, this.propertyInfo.Name)); } if ((getMethod != null && !getMethod.IsStatic) || (setMethod != null && !setMethod.IsStatic)) { isRequired = true; } } } MemberExpressionHelper.AddOperandArgument(metadata, this.Operand, isRequired); } protected override Location Execute(CodeActivityContext context) { Fx.Assert(this.propertyInfo != null, "propertyInfo must not be null"); return new PropertyLocation (this.propertyInfo, this.Operand.Get(context)); } [DataContract] class PropertyLocation : Location { [DataMember(EmitDefaultValue = false)] object owner; [DataMember] PropertyInfo propertyInfo; public PropertyLocation(PropertyInfo propertyInfo, object owner) : base() { this.propertyInfo = propertyInfo; this.owner = owner; } public override T Value { get { // Only allow access to public properties, EXCEPT that Locations are top-level variables // from the other's perspective, not internal properties, so they're okay as a special case. // E.g. "[N]" from the user's perspective is not accessing a nonpublic property, even though // at an implementation level it is. if (this.propertyInfo.GetGetMethod() == null && TypeHelper.AreTypesCompatible(this.propertyInfo.DeclaringType, typeof(Location)) == false) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.WriteonlyPropertyCannotBeRead(this.propertyInfo.DeclaringType, this.propertyInfo.Name))); } return (T)this.propertyInfo.GetValue(this.owner, null); } set { this.propertyInfo.SetValue(this.owner, value, null); } } } } } // 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
- EdmRelationshipRoleAttribute.cs
- Graphics.cs
- ReflectEventDescriptor.cs
- ColorAnimationBase.cs
- DbConvert.cs
- AspProxy.cs
- TemplateBamlTreeBuilder.cs
- DebugViewWriter.cs
- MenuItemStyleCollection.cs
- SerializationException.cs
- TransformedBitmap.cs
- SafeArrayTypeMismatchException.cs
- CommandValueSerializer.cs
- DetailsViewInsertEventArgs.cs
- IConvertible.cs
- Exceptions.cs
- ConnectionManagementElement.cs
- MeasureItemEvent.cs
- VirtualPathProvider.cs
- TdsParserHelperClasses.cs
- EntityDataSourceDataSelectionPanel.cs
- RadioButton.cs
- TraceContextEventArgs.cs
- ApplicationFileParser.cs
- Process.cs
- DataGridColumnFloatingHeader.cs
- TraceSwitch.cs
- SignatureDescription.cs
- MimeWriter.cs
- CompatibleIComparer.cs
- SessionPageStatePersister.cs
- MetadataSource.cs
- XmlCompatibilityReader.cs
- AssociatedControlConverter.cs
- XsdDuration.cs
- mda.cs
- BamlResourceContent.cs
- WebBrowsableAttribute.cs
- ClientScriptManager.cs
- ThreadAbortException.cs
- ContentTextAutomationPeer.cs
- VisualBasic.cs
- PersonalizationStateInfoCollection.cs
- TemplateManager.cs
- Module.cs
- Rights.cs
- EpmAttributeNameBuilder.cs
- SHA256Managed.cs
- HtmlInputPassword.cs
- oledbmetadatacollectionnames.cs
- TableItemPattern.cs
- DataGridViewColumn.cs
- FragmentQuery.cs
- IconHelper.cs
- List.cs
- BitmapEffectDrawing.cs
- WindowsSlider.cs
- CoreSwitches.cs
- XsltConvert.cs
- QueryReaderSettings.cs
- SecureConversationServiceElement.cs
- GuidConverter.cs
- InputLanguageSource.cs
- SqlBulkCopyColumnMappingCollection.cs
- PersonalizationStateQuery.cs
- ExtensionWindowResizeGrip.cs
- _UriTypeConverter.cs
- TextChangedEventArgs.cs
- ReadonlyMessageFilter.cs
- SafePointer.cs
- TypeUtils.cs
- SystemIPAddressInformation.cs
- CompilerGlobalScopeAttribute.cs
- SqlTriggerContext.cs
- ChangePasswordAutoFormat.cs
- EventLogHandle.cs
- LocalValueEnumerator.cs
- ScrollContentPresenter.cs
- DomNameTable.cs
- _AutoWebProxyScriptEngine.cs
- DbConnectionInternal.cs
- SQlBooleanStorage.cs
- ClientOptions.cs
- SafeRightsManagementSessionHandle.cs
- IResourceProvider.cs
- FragmentNavigationEventArgs.cs
- NullableIntSumAggregationOperator.cs
- DataFormats.cs
- RequestQueryProcessor.cs
- XPathNodeHelper.cs
- ContextMenu.cs
- UserCancellationException.cs
- CancellableEnumerable.cs
- ReservationCollection.cs
- DelegateTypeInfo.cs
- TemplatedControlDesigner.cs
- TextEffectResolver.cs
- DataGridHeaderBorder.cs
- Monitor.cs
- InstanceDataCollection.cs