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
- WorkerRequest.cs
- DataGridViewAccessibleObject.cs
- ContractCodeDomInfo.cs
- CryptoApi.cs
- CompiledIdentityConstraint.cs
- ParseElementCollection.cs
- BlurBitmapEffect.cs
- UdpRetransmissionSettings.cs
- PublisherIdentityPermission.cs
- LogLogRecordEnumerator.cs
- RowVisual.cs
- PrinterResolution.cs
- PeerService.cs
- CodePrimitiveExpression.cs
- EntryWrittenEventArgs.cs
- ListenUriMode.cs
- documentsequencetextpointer.cs
- PrintController.cs
- PresentationAppDomainManager.cs
- InstanceCompleteException.cs
- TranslateTransform.cs
- Calendar.cs
- TableLayout.cs
- CollectionBase.cs
- ComponentCommands.cs
- UpdateCompiler.cs
- UIElement3D.cs
- Int32Rect.cs
- Int32.cs
- ComponentDispatcher.cs
- ManagedWndProcTracker.cs
- Native.cs
- RegexCharClass.cs
- X509SecurityTokenParameters.cs
- PropertyRecord.cs
- InheritedPropertyDescriptor.cs
- MethodExpr.cs
- InputBindingCollection.cs
- MarkupWriter.cs
- PropertyReferenceExtension.cs
- CompilationUnit.cs
- UITypeEditor.cs
- XslTransform.cs
- IgnorePropertiesAttribute.cs
- PrintingPermission.cs
- ColumnTypeConverter.cs
- EnumValAlphaComparer.cs
- CertificateManager.cs
- HMACRIPEMD160.cs
- ViewBase.cs
- FixedDocumentPaginator.cs
- EventDrivenDesigner.cs
- XmlSecureResolver.cs
- RegexTypeEditor.cs
- ActivityPreviewDesigner.cs
- SevenBitStream.cs
- TextParagraphProperties.cs
- StylusSystemGestureEventArgs.cs
- WriterOutput.cs
- DateTimeOffsetAdapter.cs
- RecommendedAsConfigurableAttribute.cs
- UrlMapping.cs
- TableProviderWrapper.cs
- MiniLockedBorderGlyph.cs
- CompiledQuery.cs
- ConfigDefinitionUpdates.cs
- QilReference.cs
- AssemblyInfo.cs
- StreamGeometry.cs
- SystemKeyConverter.cs
- DataSvcMapFileSerializer.cs
- ConstructorArgumentAttribute.cs
- MetafileHeader.cs
- DbTypeMap.cs
- ScriptComponentDescriptor.cs
- BitmapEffectGeneralTransform.cs
- ItemsPanelTemplate.cs
- Comparer.cs
- WebConfigurationFileMap.cs
- relpropertyhelper.cs
- DataGridHeaderBorder.cs
- CreateParams.cs
- EpmSourceTree.cs
- Invariant.cs
- UrlMappingCollection.cs
- CompiledQueryCacheKey.cs
- BitVector32.cs
- CollectionViewGroup.cs
- DataGrid.cs
- ObjectStateFormatter.cs
- BasePropertyDescriptor.cs
- RemotingConfiguration.cs
- UrlPath.cs
- TagPrefixInfo.cs
- XmlUnspecifiedAttribute.cs
- DataProtection.cs
- SR.cs
- Positioning.cs
- DBSchemaTable.cs
- LinqDataSourceSelectEventArgs.cs