public static bool IsInstantiatableType(this Type type) {
type.ShouldNotBeNull("type");
if(type.IsAbstract || type.IsInterface || type.IsArray || type.IsGenericTypeDefinition || type == typeof(void))
return false;
if(HasDefaultConstructor(type) == false)
return false;
return true;
}