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
- NextPreviousPagerField.cs
- AddInIpcChannel.cs
- SystemIcmpV6Statistics.cs
- CustomCategoryAttribute.cs
- LinqDataSource.cs
- ResourceExpressionEditor.cs
- FileChangesMonitor.cs
- FrugalMap.cs
- HtmlFormAdapter.cs
- DataGridColumnHeaderAutomationPeer.cs
- TreeNodeStyle.cs
- GenericWebPart.cs
- ContextStaticAttribute.cs
- MembershipSection.cs
- DrawingContextWalker.cs
- TextOutput.cs
- CharacterHit.cs
- Point3DAnimation.cs
- METAHEADER.cs
- InvalidComObjectException.cs
- XmlSchemaComplexContentExtension.cs
- SuspendDesigner.cs
- DataError.cs
- BinaryObjectReader.cs
- CompleteWizardStep.cs
- ResourceDisplayNameAttribute.cs
- HtmlInputText.cs
- ToolbarAUtomationPeer.cs
- SRGSCompiler.cs
- ViewBase.cs
- ConditionalBranch.cs
- AssertFilter.cs
- MergablePropertyAttribute.cs
- HostedImpersonationContext.cs
- CodePropertyReferenceExpression.cs
- WindowsToolbarItemAsMenuItem.cs
- ModifierKeysValueSerializer.cs
- CodeLabeledStatement.cs
- PersonalizationStateInfo.cs
- SqlCommandBuilder.cs
- RelationshipType.cs
- Baml2006KeyRecord.cs
- BamlLocalizabilityResolver.cs
- ELinqQueryState.cs
- ProfilePropertySettings.cs
- autovalidator.cs
- MenuEventArgs.cs
- TextServicesDisplayAttributePropertyRanges.cs
- DuplicateDetector.cs
- CreateCardRequest.cs
- SByteConverter.cs
- TimelineClockCollection.cs
- UInt64Storage.cs
- Animatable.cs
- RuntimeHelpers.cs
- ConfigurationSectionHelper.cs
- XsltFunctions.cs
- AnimationLayer.cs
- MemberMemberBinding.cs
- EnvelopedSignatureTransform.cs
- StrongTypingException.cs
- DecoderReplacementFallback.cs
- ToolboxItem.cs
- serverconfig.cs
- ProfileService.cs
- QilLiteral.cs
- TextReader.cs
- ComplexPropertyEntry.cs
- WindowsListViewScroll.cs
- PackUriHelper.cs
- DetailsViewUpdatedEventArgs.cs
- RegexRunner.cs
- ReflectionTypeLoadException.cs
- BuildResult.cs
- MessageQueueCriteria.cs
- FormsAuthenticationConfiguration.cs
- ListViewGroup.cs
- XmlSchemaAnnotation.cs
- SequentialWorkflowRootDesigner.cs
- ActivityCollectionMarkupSerializer.cs
- DataServiceQueryException.cs
- ResourceContainer.cs
- Rectangle.cs
- ParameterCollection.cs
- LockedBorderGlyph.cs
- GC.cs
- SerializationSectionGroup.cs
- ImageField.cs
- ValidatorCollection.cs
- CollectionViewGroupRoot.cs
- CodeMethodInvokeExpression.cs
- EventRecordWrittenEventArgs.cs
- SqlDataSourceCache.cs
- WebServiceAttribute.cs
- Simplifier.cs
- SmiRecordBuffer.cs
- TableRow.cs
- ReadOnlyTernaryTree.cs
- Merger.cs
- Privilege.cs