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
- ErrorActivity.cs
- NamespaceList.cs
- NetworkInformationPermission.cs
- ReaderWriterLock.cs
- SmtpReplyReader.cs
- ControlType.cs
- QilXmlWriter.cs
- PageStatePersister.cs
- OptimizedTemplateContent.cs
- BitmapEncoder.cs
- CharacterString.cs
- SQLStringStorage.cs
- XPathSelectionIterator.cs
- PerfService.cs
- EnumConverter.cs
- TimerEventSubscriptionCollection.cs
- EventLogRecord.cs
- ClassHandlersStore.cs
- ListItemCollection.cs
- TreeNode.cs
- StaticExtension.cs
- EtwTrace.cs
- DataGridViewColumn.cs
- ConfigurationException.cs
- SchemaTypeEmitter.cs
- XmlSignificantWhitespace.cs
- XamlReaderHelper.cs
- TimeSpanMinutesConverter.cs
- SecureEnvironment.cs
- TypeUtils.cs
- SymmetricAlgorithm.cs
- Deflater.cs
- DefaultHttpHandler.cs
- StyleModeStack.cs
- SplitterCancelEvent.cs
- LinqToSqlWrapper.cs
- RecognizedWordUnit.cs
- ShapingWorkspace.cs
- ArgumentReference.cs
- diagnosticsswitches.cs
- SessionStateModule.cs
- Label.cs
- DoWorkEventArgs.cs
- controlskin.cs
- AuthenticationService.cs
- SerializationEventsCache.cs
- ToolStripHighContrastRenderer.cs
- SQLMoney.cs
- DataGridViewElement.cs
- XPathScanner.cs
- ADConnectionHelper.cs
- GB18030Encoding.cs
- MembershipValidatePasswordEventArgs.cs
- MenuCommandService.cs
- TextModifierScope.cs
- LinkedResourceCollection.cs
- SqlUDTStorage.cs
- ClientConfigurationHost.cs
- MouseActionConverter.cs
- StrongNamePublicKeyBlob.cs
- StsCommunicationException.cs
- AuthorizationSection.cs
- BlurBitmapEffect.cs
- CommandSet.cs
- CheckBoxStandardAdapter.cs
- BufferedReceiveManager.cs
- SerialPort.cs
- DataGridViewSortCompareEventArgs.cs
- StringComparer.cs
- MdImport.cs
- SoapEnvelopeProcessingElement.cs
- _NetworkingPerfCounters.cs
- GenericUriParser.cs
- CodeNamespace.cs
- TextModifierScope.cs
- EventDescriptorCollection.cs
- DataSourceCache.cs
- SoapCodeExporter.cs
- IgnoreSection.cs
- VectorCollection.cs
- ToolStripRenderEventArgs.cs
- SettingsAttributes.cs
- DataRow.cs
- EmptyEnumerator.cs
- ListViewCommandEventArgs.cs
- VSWCFServiceContractGenerator.cs
- LinqDataSourceUpdateEventArgs.cs
- EnumConverter.cs
- Span.cs
- OverflowException.cs
- PeerContact.cs
- LockedActivityGlyph.cs
- TransformerTypeCollection.cs
- ResourceExpression.cs
- LinkClickEvent.cs
- DefaultAuthorizationContext.cs
- ComplexTypeEmitter.cs
- RequestQueryProcessor.cs
- SecurityRuntime.cs
- TokenizerHelper.cs