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
- EntityDescriptor.cs
- SelectionWordBreaker.cs
- DesignerView.Commands.cs
- HtmlMeta.cs
- PrimitiveType.cs
- HandledMouseEvent.cs
- HandoffBehavior.cs
- DataGridViewCellMouseEventArgs.cs
- AuthenticatingEventArgs.cs
- WebBrowserHelper.cs
- MetadataItem_Static.cs
- EmptyEnumerator.cs
- SettingsProviderCollection.cs
- InputLanguage.cs
- ImageField.cs
- IntegerValidatorAttribute.cs
- DrawListViewColumnHeaderEventArgs.cs
- PTProvider.cs
- TableItemProviderWrapper.cs
- TypeUnloadedException.cs
- GeneralTransform3D.cs
- GenerateScriptTypeAttribute.cs
- RadioButtonBaseAdapter.cs
- SystemDiagnosticsSection.cs
- XsltArgumentList.cs
- RangeValuePattern.cs
- DbCommandTree.cs
- NullableDoubleAverageAggregationOperator.cs
- ArrayList.cs
- ChannelPoolSettings.cs
- Int32Converter.cs
- StaticTextPointer.cs
- CheckBoxField.cs
- IntegerFacetDescriptionElement.cs
- DbMetaDataFactory.cs
- SocketAddress.cs
- CheckBox.cs
- DelegatedStream.cs
- XmlHelper.cs
- Calendar.cs
- XamlToRtfParser.cs
- SignatureResourcePool.cs
- SqlNotificationEventArgs.cs
- DocComment.cs
- DataReceivedEventArgs.cs
- BaseResourcesBuildProvider.cs
- ParagraphResult.cs
- SimpleLine.cs
- SqlResolver.cs
- CodeParameterDeclarationExpression.cs
- Camera.cs
- IdentifierCreationService.cs
- ScrollableControlDesigner.cs
- PackageDigitalSignatureManager.cs
- ProfilePropertyNameValidator.cs
- ExpressionBinding.cs
- AutoCompleteStringCollection.cs
- FunctionDescription.cs
- CaretElement.cs
- StringConverter.cs
- VariableExpressionConverter.cs
- SQLDateTime.cs
- OutKeywords.cs
- EntityCommandExecutionException.cs
- IConvertible.cs
- OdbcRowUpdatingEvent.cs
- ListViewContainer.cs
- ConfigurationSectionGroup.cs
- OneWayBindingElement.cs
- TextViewSelectionProcessor.cs
- FtpWebRequest.cs
- ObjectResult.cs
- UIElementHelper.cs
- Int16AnimationUsingKeyFrames.cs
- TrackingConditionCollection.cs
- BrowserCapabilitiesCompiler.cs
- AppSecurityManager.cs
- newinstructionaction.cs
- ConnectionManagementElementCollection.cs
- ParallelTimeline.cs
- CodeCommentStatementCollection.cs
- TableLayoutCellPaintEventArgs.cs
- VerticalAlignConverter.cs
- DocumentOrderQuery.cs
- DataServiceHost.cs
- Boolean.cs
- XmlSecureResolver.cs
- Sql8ConformanceChecker.cs
- QueryExecutionOption.cs
- DiscoveryMessageSequenceCD1.cs
- DocumentApplicationJournalEntry.cs
- NullableIntSumAggregationOperator.cs
- StylusShape.cs
- LambdaCompiler.Statements.cs
- OleDbException.cs
- CommandValueSerializer.cs
- MarkerProperties.cs
- TypeRefElement.cs
- DataGridCommandEventArgs.cs
- WebPartPersonalization.cs