37 lines
1.3 KiB
C#
37 lines
1.3 KiB
C#
#if SILVERLIGHT
|
|
namespace Caliburn.Micro {
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
|
|
/// <summary>
|
|
/// Provides information about the characteristics for a component, such as its attributes, properties, and events. This class cannot be inherited.
|
|
/// </summary>
|
|
public static class TypeDescriptor {
|
|
static readonly Dictionary<Type, TypeConverter> Cache = new Dictionary<Type, TypeConverter>();
|
|
|
|
/// <summary>
|
|
/// Returns a type converter for the specified type.
|
|
/// </summary>
|
|
/// <param name="type">The System.Type of the target component.</param>
|
|
/// <returns>A System.ComponentModel.TypeConverter for the specified type.</returns>
|
|
public static TypeConverter GetConverter(Type type) {
|
|
TypeConverter converter;
|
|
|
|
if(!Cache.TryGetValue(type, out converter)) {
|
|
var customAttributes = type.GetAttributes<TypeConverterAttribute>(true);
|
|
|
|
if (!customAttributes.Any()) {
|
|
return new TypeConverter();
|
|
}
|
|
|
|
converter = Activator.CreateInstance(Type.GetType(customAttributes.First().ConverterTypeName)) as TypeConverter;
|
|
Cache[type] = converter;
|
|
}
|
|
|
|
return converter;
|
|
}
|
|
}
|
|
}
|
|
#endif |