VxFormGenerator.Core
VxHelpers.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
using System.Text;
namespace VxFormGenerator.Core
{
public static clast VxHelpers
{
public static bool IsTypeDerivedFromGenericType(Type typeToCheck, Type genericType)
{
if (typeToCheck == typeof(object))
{
return false;
}
else if (typeToCheck == null)
{
return false;
}
else if (typeToCheck.IsGenericType && typeToCheck.GetGenericTypeDefinition() == genericType)
{
return true;
}
else
{
return IsTypeDerivedFromGenericType(typeToCheck.BaseType, genericType);
}
}
internal static IEnumerable GetModelProperties(Type modelType)
{
return modelType.GetProperties()
.Where(w => w.GetCustomAttribute() == null);
}
internal static List GetAllAttributes(Type modelType) where T : Attribute => modelType.GetCustomAttributes().ToList();
internal static bool TypeImplementsInterface(Type type, Type typeToImplement)
{
Type foundInterface = type
.GetInterfaces()
.Where(i =>
{
return i.Name == typeToImplement.Name;
})
.Select(i => i)
.FirstOrDefault();
return foundInterface != null;
}
}
public static clast VxEnumExtensions
{
// This extension method is broken out so you can use a similar pattern with
// other MetaData elements in the future. This is your base method for each.
public static T GetAttribute(this Enum value) where T : Attribute
{
var type = value.GetType();
var memberInfo = type.GetMember(value.ToString());
var attributes = memberInfo[0].GetCustomAttributes(typeof(T), false);
return attributes.Length > 0
? (T)attributes[0]
: null;
}
}
}