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
- AssertFilter.cs
- MessageFilterTable.cs
- ServicePointManagerElement.cs
- GacUtil.cs
- IdnMapping.cs
- HandlerFactoryCache.cs
- DropShadowBitmapEffect.cs
- DefaultCommandExtensionCallback.cs
- Invariant.cs
- NavigationEventArgs.cs
- ProtectedConfiguration.cs
- DataTableClearEvent.cs
- SafeWaitHandle.cs
- SoapReflector.cs
- Matrix.cs
- ToolZone.cs
- Label.cs
- ItemList.cs
- DataControlPagerLinkButton.cs
- ItemType.cs
- FaultDesigner.cs
- UserPreferenceChangedEventArgs.cs
- GridViewRow.cs
- entitydatasourceentitysetnameconverter.cs
- SqlDataSourceView.cs
- PointUtil.cs
- OdbcConnectionFactory.cs
- TypefaceMap.cs
- OperationAbortedException.cs
- UnmanagedMarshal.cs
- DateTimeOffsetStorage.cs
- documentsequencetextview.cs
- FixedPageStructure.cs
- QuaternionKeyFrameCollection.cs
- PeerCustomResolverElement.cs
- PointCollectionValueSerializer.cs
- PropertyTabAttribute.cs
- AsymmetricKeyExchangeDeformatter.cs
- InvokeMethodActivity.cs
- EndpointPerformanceCounters.cs
- TraceListeners.cs
- DoubleAnimationUsingKeyFrames.cs
- TemplateBindingExtension.cs
- RegistryPermission.cs
- WebControl.cs
- PresentationTraceSources.cs
- QuaternionAnimation.cs
- RemoteWebConfigurationHost.cs
- WriteableBitmap.cs
- BindStream.cs
- DataControlPagerLinkButton.cs
- ContentDisposition.cs
- RowSpanVector.cs
- GridViewColumnHeaderAutomationPeer.cs
- RegionData.cs
- HttpServerUtilityWrapper.cs
- CookieParameter.cs
- CellNormalizer.cs
- GenerateDerivedKeyRequest.cs
- AnnotationMap.cs
- FilteredAttributeCollection.cs
- RequestFactory.cs
- ValidatorCollection.cs
- Inflater.cs
- ChildChangedEventArgs.cs
- ClientApiGenerator.cs
- ArrayConverter.cs
- EncryptedPackage.cs
- InputBinder.cs
- RelationshipConstraintValidator.cs
- RegexCapture.cs
- RegexWorker.cs
- RepeatInfo.cs
- InputLangChangeEvent.cs
- Button.cs
- CryptoStream.cs
- PropertyDescriptorCollection.cs
- FillRuleValidation.cs
- WebPartsSection.cs
- ImageBrush.cs
- ResolveResponseInfo.cs
- DataGridViewBindingCompleteEventArgs.cs
- DeviceOverridableAttribute.cs
- EncryptedPackageFilter.cs
- DLinqAssociationProvider.cs
- CharacterMetrics.cs
- SqlReorderer.cs
- SqlNode.cs
- HtmlAnchor.cs
- SemanticAnalyzer.cs
- Sentence.cs
- XamlStyleSerializer.cs
- TimeSpanParse.cs
- DataSourceView.cs
- ReadOnlyHierarchicalDataSourceView.cs
- CustomLineCap.cs
- AsyncCodeActivity.cs
- XmlValidatingReader.cs
- TypeElementCollection.cs
- ThreadAttributes.cs