This commit is contained in:
David Lebée 2018-04-17 22:22:01 -05:00
parent 304a984262
commit 80b616b914
5 changed files with 0 additions and 103 deletions

View File

@ -1,58 +0,0 @@
using PoweredSoft.Types.Converters;
using PoweredSoft.Types.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PoweredSoft.Types
{
public static class Converter
{
public static List<ITypeConverter> Converters { get; internal set; } = new List<ITypeConverter>
{
new StringToDateConverter(),
new StringToGuidConverter()
};
public static void RegisterConverter(ITypeConverter converter)
{
lock (Converters)
{
Converters.Add(converter);
}
}
public static void ReplaceConverter(ITypeConverter converter, Type source, Type destination)
{
lock (Converters)
{
Converters.RemoveAll(t => t.CanConvert(source, destination));
Converters.Add(converter);
}
}
public static object To(this object source, Type type)
{
object ret = null;
// safe if null.
if (source == null)
return ret;
// establish final type.
var notNullType = Nullable.GetUnderlyingType(type);
var finalType = notNullType ?? type;
var converter = Converters.FirstOrDefault(t => t.CanConvert(source.GetType(), finalType));
if (converter != null)
ret = converter.Convert(source, finalType);
else
ret = Convert.ChangeType(source, finalType);
if (notNullType != null)
ret = Activator.CreateInstance(type, new object[] { ret });
return ret;
}
}
}

View File

@ -1,13 +0,0 @@
using PoweredSoft.Types.Interface;
using System;
using System.Collections.Generic;
using System.Text;
namespace PoweredSoft.Types.Converters
{
public class StringToDateConverter : ITypeConverter
{
public bool CanConvert(Type source, Type destination) => source == typeof(string) && destination == typeof(DateTime);
public object Convert(object source, Type destination) => DateTime.Parse((string)source);
}
}

View File

@ -1,13 +0,0 @@
using PoweredSoft.Types.Interface;
using System;
using System.Collections.Generic;
using System.Text;
namespace PoweredSoft.Types.Converters
{
public class StringToGuidConverter : ITypeConverter
{
public bool CanConvert(Type source, Type destination) => source == typeof(string) && destination == typeof(Guid);
public object Convert(object source, Type destination) => Guid.Parse((string)source);
}
}

View File

@ -1,12 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace PoweredSoft.Types.Interface
{
public interface ITypeConverter
{
bool CanConvert(Type source, Type destination);
object Convert(object source, Type destination);
}
}

View File

@ -1,7 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>