Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Xaml / AttributeConverter.cs / 1305376 / AttributeConverter.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.Xaml { using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design.Serialization; using System.Globalization; using System.Reflection; using System.Collections; using System.Runtime; //AttributeConverter is to convert some XAML-unfriendly attributes (without default ctor) to InstanceDescriptor for XAML serialization //AttributeInfo is a helper class to provide type specfic info for each Attribute class abstract class AttributeInfowhere TAttribute : Attribute { public abstract ConstructorInfo GetConstructor(); public abstract ICollection GetConstructorArguments(TAttribute attribute); //whether to use argumented-ctor for serialization even when there's default ctor public abstract bool LookupConstructionRequiresArguments { get; } } class AttributeConverter : TypeConverter where TAttribute:Attribute where TAttributeInfo:AttributeInfo , new() { TAttributeInfo attributeInfo = new TAttributeInfo(); static ConstructorInfo attributeConstructor = null; ConstructorInfo Constructor { get { //no need to lock here because every thread will generate the same constructor info even in race condition //and cost to get the constructor is relative small if (AttributeConverter .attributeConstructor == null) { AttributeConverter .attributeConstructor = this.attributeInfo.GetConstructor(); } return AttributeConverter .attributeConstructor; } } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(InstanceDescriptor)) { return true; } return base.CanConvertTo(context, destinationType); } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { return false; } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType != typeof(InstanceDescriptor)) { return base.ConvertTo(context, culture, value, destinationType); } TAttribute attribute = value as TAttribute; if (attribute == null) { throw FxTrace.Exception.AsError(new ArgumentException( string.Format(CultureInfo.CurrentCulture, SR.AttributeConverter_ValueMustBeAttribute, typeof(TAttribute)), "value")); } return new InstanceDescriptor(this.Constructor, this.attributeInfo.GetConstructorArguments(attribute), true); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.Xaml { using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design.Serialization; using System.Globalization; using System.Reflection; using System.Collections; using System.Runtime; //AttributeConverter is to convert some XAML-unfriendly attributes (without default ctor) to InstanceDescriptor for XAML serialization //AttributeInfo is a helper class to provide type specfic info for each Attribute class abstract class AttributeInfo where TAttribute : Attribute { public abstract ConstructorInfo GetConstructor(); public abstract ICollection GetConstructorArguments(TAttribute attribute); //whether to use argumented-ctor for serialization even when there's default ctor public abstract bool LookupConstructionRequiresArguments { get; } } class AttributeConverter : TypeConverter where TAttribute:Attribute where TAttributeInfo:AttributeInfo , new() { TAttributeInfo attributeInfo = new TAttributeInfo(); static ConstructorInfo attributeConstructor = null; ConstructorInfo Constructor { get { //no need to lock here because every thread will generate the same constructor info even in race condition //and cost to get the constructor is relative small if (AttributeConverter .attributeConstructor == null) { AttributeConverter .attributeConstructor = this.attributeInfo.GetConstructor(); } return AttributeConverter .attributeConstructor; } } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(InstanceDescriptor)) { return true; } return base.CanConvertTo(context, destinationType); } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { return false; } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType != typeof(InstanceDescriptor)) { return base.ConvertTo(context, culture, value, destinationType); } TAttribute attribute = value as TAttribute; if (attribute == null) { throw FxTrace.Exception.AsError(new ArgumentException( string.Format(CultureInfo.CurrentCulture, SR.AttributeConverter_ValueMustBeAttribute, typeof(TAttribute)), "value")); } return new InstanceDescriptor(this.Constructor, this.attributeInfo.GetConstructorArguments(attribute), true); } } } // 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
- TemplateField.cs
- GraphicsState.cs
- XmlDataLoader.cs
- CryptoKeySecurity.cs
- ISAPIApplicationHost.cs
- Cursors.cs
- SafeArrayRankMismatchException.cs
- storepermission.cs
- xamlnodes.cs
- ToolStripContentPanelDesigner.cs
- TextChange.cs
- HyperLink.cs
- DataGridLinkButton.cs
- GridViewDeleteEventArgs.cs
- CodeTypeReference.cs
- InvokeHandlers.cs
- SystemBrushes.cs
- ServiceObjectContainer.cs
- ItemDragEvent.cs
- ImageListUtils.cs
- PassportIdentity.cs
- TextEditorSelection.cs
- PackagePartCollection.cs
- SolidColorBrush.cs
- SHA256Managed.cs
- MsmqIntegrationChannelListener.cs
- SoapElementAttribute.cs
- Switch.cs
- DispatcherTimer.cs
- Model3DGroup.cs
- sortedlist.cs
- EmptyQuery.cs
- ExpressionPrefixAttribute.cs
- HandleRef.cs
- BoundPropertyEntry.cs
- TypeForwardedToAttribute.cs
- BooleanConverter.cs
- errorpatternmatcher.cs
- wgx_render.cs
- AnnotationAuthorChangedEventArgs.cs
- FixUp.cs
- ValuePattern.cs
- FtpCachePolicyElement.cs
- AttributeCollection.cs
- TextWriter.cs
- XmlMemberMapping.cs
- StylusDownEventArgs.cs
- ProtocolsSection.cs
- SingleObjectCollection.cs
- DiffuseMaterial.cs
- _ChunkParse.cs
- ExecutionScope.cs
- NetDataContractSerializer.cs
- MarkupCompilePass1.cs
- MaterialGroup.cs
- PackWebRequest.cs
- CommonProperties.cs
- UIPropertyMetadata.cs
- SiteMapNodeItem.cs
- ToolStripDesignerUtils.cs
- UrlAuthorizationModule.cs
- XmlILModule.cs
- GridLengthConverter.cs
- DBSqlParserTable.cs
- FontWeights.cs
- NeutralResourcesLanguageAttribute.cs
- RuntimeHandles.cs
- Int32RectConverter.cs
- WMICapabilities.cs
- DbConnectionInternal.cs
- InsufficientMemoryException.cs
- TextAutomationPeer.cs
- WebPartZoneCollection.cs
- DSASignatureDeformatter.cs
- unitconverter.cs
- TimeZoneInfo.cs
- XmlSchemaSimpleTypeRestriction.cs
- SecurityState.cs
- FlowDocumentReader.cs
- ToolBarButtonDesigner.cs
- DataGridViewCellFormattingEventArgs.cs
- MinimizableAttributeTypeConverter.cs
- FunctionCommandText.cs
- AssemblyCollection.cs
- CodeVariableDeclarationStatement.cs
- ProfileEventArgs.cs
- BinaryCommonClasses.cs
- XmlQualifiedName.cs
- LaxModeSecurityHeaderElementInferenceEngine.cs
- ErrorEventArgs.cs
- AssociatedControlConverter.cs
- baseaxisquery.cs
- DetailsViewUpdateEventArgs.cs
- RecordsAffectedEventArgs.cs
- TriggerActionCollection.cs
- HttpModulesSection.cs
- InvalidCardException.cs
- ExpressionStringBuilder.cs
- TrackingDataItemValue.cs
- WebPartConnectionsCloseVerb.cs