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
- CharacterBufferReference.cs
- ModelItemKeyValuePair.cs
- DomainUpDown.cs
- XmlSchemaSubstitutionGroup.cs
- NativeMethods.cs
- XmlSchemaAnyAttribute.cs
- dbdatarecord.cs
- BamlRecordReader.cs
- ObjectIDGenerator.cs
- ItemMap.cs
- ConstraintEnumerator.cs
- RoleService.cs
- CryptoStream.cs
- InvalidCommandTreeException.cs
- DetailsViewDeleteEventArgs.cs
- InfoCardSymmetricCrypto.cs
- StyleModeStack.cs
- InvariantComparer.cs
- WebPartPersonalization.cs
- TableRow.cs
- CfgParser.cs
- WebResponse.cs
- VisualBrush.cs
- PenLineJoinValidation.cs
- ResourceAttributes.cs
- CanonicalizationDriver.cs
- AccessDataSource.cs
- CompilationLock.cs
- MappingException.cs
- XPathDescendantIterator.cs
- Bitmap.cs
- UIElement.cs
- DescendantQuery.cs
- InvokeMethodActivityDesigner.cs
- WebColorConverter.cs
- LayoutEngine.cs
- _BufferOffsetSize.cs
- followingquery.cs
- DrawingBrush.cs
- SHA256CryptoServiceProvider.cs
- PackageFilter.cs
- SerialPinChanges.cs
- ToolStripComboBox.cs
- SqlFlattener.cs
- DataBinder.cs
- NativeMethods.cs
- InlineObject.cs
- BaseDataListPage.cs
- MsmqProcessProtocolHandler.cs
- XmlTextWriter.cs
- IncrementalCompileAnalyzer.cs
- COM2TypeInfoProcessor.cs
- DBCommand.cs
- IconConverter.cs
- MouseGestureConverter.cs
- CodeDefaultValueExpression.cs
- ItemChangedEventArgs.cs
- EventHandlersStore.cs
- FontCacheUtil.cs
- DnsCache.cs
- HttpApplication.cs
- FacetEnabledSchemaElement.cs
- ExpressionBindingCollection.cs
- FlatButtonAppearance.cs
- ToolStripAdornerWindowService.cs
- QuadraticBezierSegment.cs
- TypeNameConverter.cs
- PersonalizableTypeEntry.cs
- ElementFactory.cs
- ButtonChrome.cs
- SimplePropertyEntry.cs
- OAVariantLib.cs
- _OverlappedAsyncResult.cs
- MissingMemberException.cs
- CanonicalXml.cs
- DiscoveryCallbackBehavior.cs
- LabelLiteral.cs
- TraceUtility.cs
- DataGridViewLinkColumn.cs
- MapPathBasedVirtualPathProvider.cs
- COM2EnumConverter.cs
- ViewManager.cs
- OleDbStruct.cs
- WriteableOnDemandStream.cs
- IPAddressCollection.cs
- Int32Animation.cs
- ConstraintEnumerator.cs
- FamilyTypefaceCollection.cs
- ViewLoader.cs
- XmlEntity.cs
- Timeline.cs
- AlternateViewCollection.cs
- WebBrowserProgressChangedEventHandler.cs
- SafeRightsManagementQueryHandle.cs
- InstanceOwner.cs
- WorkflowServiceBehavior.cs
- XmlValidatingReader.cs
- GroupByExpressionRewriter.cs
- EntityModelSchemaGenerator.cs
- DrawingImage.cs