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
- WebPartMinimizeVerb.cs
- HtmlWindowCollection.cs
- Pair.cs
- HttpRequestWrapper.cs
- PreservationFileWriter.cs
- SystemNetHelpers.cs
- ColumnCollectionEditor.cs
- ChangeInterceptorAttribute.cs
- CompiledQueryCacheEntry.cs
- FacetChecker.cs
- FreezableDefaultValueFactory.cs
- TextEditorThreadLocalStore.cs
- CacheSection.cs
- AppPool.cs
- httpstaticobjectscollection.cs
- FlowDocumentReaderAutomationPeer.cs
- PeerNearMe.cs
- ToolStripGripRenderEventArgs.cs
- RangeBaseAutomationPeer.cs
- ListSortDescriptionCollection.cs
- HtmlWindow.cs
- Queue.cs
- XmlILIndex.cs
- GridViewPageEventArgs.cs
- ObjectHandle.cs
- ExceptionUtil.cs
- SqlUtils.cs
- mongolianshape.cs
- ChannelPool.cs
- TabItem.cs
- WindowsMenu.cs
- BufferModesCollection.cs
- XmlValueConverter.cs
- UnsafeNativeMethodsTablet.cs
- XmlDataSourceNodeDescriptor.cs
- BasicCommandTreeVisitor.cs
- NamespaceList.cs
- StringSource.cs
- MiniConstructorInfo.cs
- AutomationPropertyInfo.cs
- ParameterReplacerVisitor.cs
- NumericUpDownAcceleration.cs
- XamlWriter.cs
- BaseCodeDomTreeGenerator.cs
- PlatformNotSupportedException.cs
- SingleAnimation.cs
- TypeListConverter.cs
- TTSEngineProxy.cs
- RectConverter.cs
- CodePageEncoding.cs
- XmlIncludeAttribute.cs
- EventBindingService.cs
- ThicknessKeyFrameCollection.cs
- TickBar.cs
- ComplusTypeValidator.cs
- XmlWrappingReader.cs
- GraphicsState.cs
- TextElementEnumerator.cs
- UnmanagedMarshal.cs
- CheckPair.cs
- ActivityFunc.cs
- StructuredTypeEmitter.cs
- EngineSite.cs
- WindowsTitleBar.cs
- FillBehavior.cs
- StateMachineTimers.cs
- ConnectionManagementSection.cs
- RectangleGeometry.cs
- TransactionContextManager.cs
- SplitterPanel.cs
- MenuItem.cs
- FixedDocumentSequencePaginator.cs
- TextEndOfSegment.cs
- SqlRewriteScalarSubqueries.cs
- TrackBar.cs
- WebPartUserCapability.cs
- CompressStream.cs
- ProviderConnectionPointCollection.cs
- TextPattern.cs
- FormatterServices.cs
- Tile.cs
- OleAutBinder.cs
- SamlConstants.cs
- PipelineModuleStepContainer.cs
- Publisher.cs
- SQLByte.cs
- WindowsToolbarItemAsMenuItem.cs
- CryptoKeySecurity.cs
- SHA256.cs
- AppDomainManager.cs
- ConnectivityStatus.cs
- DotExpr.cs
- CaseDesigner.xaml.cs
- Pair.cs
- FontUnit.cs
- SAPICategories.cs
- GenerateTemporaryTargetAssembly.cs
- LabelEditEvent.cs
- ProfileSettings.cs
- EditableLabelControl.cs