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
- MimeWriter.cs
- HttpRequestTraceRecord.cs
- BufferModesCollection.cs
- CodeIdentifiers.cs
- EntityDataSourceStatementEditor.cs
- FloaterBaseParagraph.cs
- ListViewDeleteEventArgs.cs
- TypeExtension.cs
- Constants.cs
- XmlSchemaIdentityConstraint.cs
- MetadataArtifactLoaderCompositeFile.cs
- LongSumAggregationOperator.cs
- PlatformCulture.cs
- DesignerView.xaml.cs
- PageContentAsyncResult.cs
- DisposableCollectionWrapper.cs
- XPathScanner.cs
- Geometry.cs
- ReliableReplySessionChannel.cs
- _OverlappedAsyncResult.cs
- StaticResourceExtension.cs
- Visual3D.cs
- XmlIgnoreAttribute.cs
- CollectionEditorDialog.cs
- SpeechEvent.cs
- TypeReference.cs
- DbgUtil.cs
- DeclarativeCatalogPart.cs
- XmlReflectionImporter.cs
- CodeDirectoryCompiler.cs
- SmiTypedGetterSetter.cs
- MediaPlayer.cs
- ToolbarAUtomationPeer.cs
- HealthMonitoringSection.cs
- DatatypeImplementation.cs
- PropertyChangeTracker.cs
- Dynamic.cs
- Module.cs
- Stackframe.cs
- PenLineCapValidation.cs
- AssemblyInfo.cs
- ByteConverter.cs
- Wizard.cs
- XmlTypeAttribute.cs
- XamlReaderHelper.cs
- ImageCodecInfoPrivate.cs
- DSASignatureFormatter.cs
- CornerRadiusConverter.cs
- BuildManager.cs
- SingleAnimationUsingKeyFrames.cs
- DecimalAnimation.cs
- SecUtil.cs
- OutputCacheSettings.cs
- SchemaMerger.cs
- RichTextBox.cs
- TextEncodedRawTextWriter.cs
- SmiEventStream.cs
- Point3D.cs
- CircleEase.cs
- WorkflowDesignerColors.cs
- LoadedOrUnloadedOperation.cs
- TailCallAnalyzer.cs
- PropertyMap.cs
- ZipIOFileItemStream.cs
- TreeNodeMouseHoverEvent.cs
- EntityClassGenerator.cs
- TraceListeners.cs
- ISO2022Encoding.cs
- LayoutEngine.cs
- HttpHandlersInstallComponent.cs
- FixedSOMContainer.cs
- HttpModule.cs
- CheckedPointers.cs
- TextPatternIdentifiers.cs
- GACIdentityPermission.cs
- Compiler.cs
- xdrvalidator.cs
- ExpressionBindings.cs
- BooleanExpr.cs
- Currency.cs
- ConnectionConsumerAttribute.cs
- ViewManager.cs
- Compress.cs
- GridViewDeletedEventArgs.cs
- StylusButtonEventArgs.cs
- ModuleBuilderData.cs
- ComplexLine.cs
- Line.cs
- BitSet.cs
- MdiWindowListStrip.cs
- LinqMaximalSubtreeNominator.cs
- TransactedBatchContext.cs
- ToReply.cs
- OlePropertyStructs.cs
- SplineKeyFrames.cs
- BasicKeyConstraint.cs
- AppLevelCompilationSectionCache.cs
- WmlListAdapter.cs
- OracleEncoding.cs
- MasterPageCodeDomTreeGenerator.cs