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 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
- DynamicDataRouteHandler.cs
- StringBuilder.cs
- SessionParameter.cs
- DeclarativeCatalogPartDesigner.cs
- SmiConnection.cs
- BinHexEncoding.cs
- SecurityContextSecurityToken.cs
- RepeatInfo.cs
- EditorZone.cs
- XmlValidatingReaderImpl.cs
- WindowsTreeView.cs
- DeriveBytes.cs
- X509ChainElement.cs
- StreamGeometryContext.cs
- DataSource.cs
- WebColorConverter.cs
- DataTemplateSelector.cs
- FrameworkTextComposition.cs
- X509CertificateTrustedIssuerElementCollection.cs
- ManagementInstaller.cs
- TableLayoutSettings.cs
- DbTransaction.cs
- UriTemplate.cs
- COM2ExtendedBrowsingHandler.cs
- AbandonedMutexException.cs
- ToolStripDropTargetManager.cs
- SvcMapFileSerializer.cs
- Stylus.cs
- input.cs
- PackageRelationship.cs
- ActionFrame.cs
- RoutedEvent.cs
- ThreadExceptionDialog.cs
- WebDisplayNameAttribute.cs
- EncryptedType.cs
- ScriptComponentDescriptor.cs
- Pkcs7Recipient.cs
- DataSvcMapFile.cs
- _HelperAsyncResults.cs
- XmlWellformedWriterHelpers.cs
- CodeDomSerializerException.cs
- LabelLiteral.cs
- RandomDelayQueuedSendsAsyncResult.cs
- EpmSourcePathSegment.cs
- CustomAttributeFormatException.cs
- RenderContext.cs
- ListDataHelper.cs
- EdmFunctions.cs
- RtfControls.cs
- FileLoadException.cs
- WebSysDefaultValueAttribute.cs
- RegexCapture.cs
- AdornerHitTestResult.cs
- FieldBuilder.cs
- NavigateEvent.cs
- DuplicateWaitObjectException.cs
- EnvironmentPermission.cs
- StaticFileHandler.cs
- SafePointer.cs
- ToolStripSplitButton.cs
- Int64Storage.cs
- QueueProcessor.cs
- UriWriter.cs
- UIElement3D.cs
- PrePrepareMethodAttribute.cs
- TabControl.cs
- XmlSchemaSimpleTypeRestriction.cs
- ILGenerator.cs
- CollectionEditor.cs
- Point3DCollectionConverter.cs
- Win32SafeHandles.cs
- AsyncOperationManager.cs
- assertwrapper.cs
- SQLBytesStorage.cs
- RectKeyFrameCollection.cs
- XmlSchemaFacet.cs
- PopOutPanel.cs
- EventLogPermissionEntry.cs
- WindowsTab.cs
- GeometryGroup.cs
- TreeView.cs
- UIntPtr.cs
- _TLSstream.cs
- FontInfo.cs
- CompiledRegexRunner.cs
- WebAdminConfigurationHelper.cs
- LexicalChunk.cs
- DSGeneratorProblem.cs
- EventRoute.cs
- HttpCookieCollection.cs
- _SecureChannel.cs
- COSERVERINFO.cs
- RunClient.cs
- AdornerLayer.cs
- XmlSchemaType.cs
- SignedXml.cs
- BypassElement.cs
- BitConverter.cs
- LogReserveAndAppendState.cs
- WCFBuildProvider.cs