Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PropertySegmentSerializer.cs
- UrlPropertyAttribute.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- CommonServiceBehaviorElement.cs
- EmptyEnumerator.cs
- TriggerActionCollection.cs
- RemotingException.cs
- EdmProviderManifest.cs
- WeakEventManager.cs
- AsyncPostBackErrorEventArgs.cs
- XmlChildNodes.cs
- shaperfactoryquerycacheentry.cs
- WebHttpSecurityElement.cs
- ShapingWorkspace.cs
- SmiEventSink_DeferedProcessing.cs
- CompositeControl.cs
- XmlSchemaAttributeGroupRef.cs
- FolderNameEditor.cs
- DbDataSourceEnumerator.cs
- Pkcs7Recipient.cs
- TextRangeEditTables.cs
- LinqDataSourceContextData.cs
- Config.cs
- PtsPage.cs
- ResizeGrip.cs
- ReferencedCollectionType.cs
- ClientBuildManagerTypeDescriptionProviderBridge.cs
- PostBackOptions.cs
- UpdateTracker.cs
- EventItfInfo.cs
- CommonXSendMessage.cs
- WarningException.cs
- IgnorePropertiesAttribute.cs
- AutomationProperty.cs
- NegatedCellConstant.cs
- InvalidFilterCriteriaException.cs
- Monitor.cs
- DataServiceQueryOfT.cs
- SystemInfo.cs
- UnsafeNativeMethodsPenimc.cs
- TripleDES.cs
- HotCommands.cs
- ResourceDisplayNameAttribute.cs
- DrawingDrawingContext.cs
- WSAddressing10ProblemHeaderQNameFault.cs
- DataServiceRequestOfT.cs
- Line.cs
- HostingEnvironment.cs
- BitmapEffectDrawing.cs
- CmsInterop.cs
- DesignTimeTemplateParser.cs
- FactoryGenerator.cs
- StateDesigner.Layouts.cs
- PasswordTextNavigator.cs
- CommonRemoteMemoryBlock.cs
- HandleCollector.cs
- BitmapFrameDecode.cs
- Separator.cs
- DependencySource.cs
- ConnectionManagementSection.cs
- DrawingDrawingContext.cs
- RightsManagementInformation.cs
- DataList.cs
- StylusPointPropertyId.cs
- DetectRunnableInstancesTask.cs
- PageAsyncTaskManager.cs
- MultiTouchSystemGestureLogic.cs
- XslTransform.cs
- ServiceThrottlingElement.cs
- XmlNullResolver.cs
- FloatUtil.cs
- SmiRequestExecutor.cs
- SrgsSemanticInterpretationTag.cs
- Marshal.cs
- Brushes.cs
- SettingsBindableAttribute.cs
- MemberAssignment.cs
- EnumConverter.cs
- ExpandedWrapper.cs
- ViewService.cs
- DropSource.cs
- StyleTypedPropertyAttribute.cs
- PropertyEntry.cs
- Rotation3D.cs
- SevenBitStream.cs
- QueryConverter.cs
- ImageSource.cs
- CheckedListBox.cs
- IDataContractSurrogate.cs
- HostedTransportConfigurationBase.cs
- IFlowDocumentViewer.cs
- AssemblySettingAttributes.cs
- ReadOnlyCollection.cs
- AssemblyResourceLoader.cs
- SystemMulticastIPAddressInformation.cs
- DataGridViewRowPostPaintEventArgs.cs
- SoapAttributes.cs
- DtdParser.cs
- ParallelEnumerable.cs
- StringUtil.cs