private void CreateConstructor(Binder.BaseTypeConfig cTarget)
 {
     Expression expr;
     switch (cTarget.ConstructorType)
     {
         case Binder.BaseTypeConfig.ConstructorTypeConfig.NoArguments:
             {
                 expr = Expression.New(cTarget.TargetType);
                 break;
             }
         case Binder.BaseTypeConfig.ConstructorTypeConfig.Values:
             {
                 expr = CreateExpressionConstructor(cTarget.TargetType.GetConstructor(cTarget.ConstructorArguments),
                     ci => CreateExpressions(ci, cTarget.ConstructorValues()));
                 break;
             }
         case Binder.BaseTypeConfig.ConstructorTypeConfig.Action:
             {
                 expr = CreateExpressionConstructor(FindConstructor(cTarget.TargetType),
                     ci => ci.GetParameters().Select(p => CreateParameterExpression(p)).ToArray());
                 break;
             }
         case Binder.BaseTypeConfig.ConstructorTypeConfig.NoValue:
             {
                 expr = CreateExpressionConstructor(FindConstructor(cTarget.TargetType),
                     ci => ci.GetParameters().Select(p => CreateParameterExpression(p)).ToArray());
                 break;
             }
         default:
             throw new ArgumentException("Unexpected value in Binder.BaseTypeConfig.ConstructorTypeConfig");
     }
     cTarget.Constructor = Expression.Lambda<Func<object>>(expr).Compile();
 }