ModelState.IsValid vs IValidateableObject en MVC3

entonces de acuerdo aGu IValidatableObject.Validate() debería llamarse cuando un controlador valida su modelo (es decir, antesModelState.IsValid) sin embargo, simplemente haciendo que el modelo implementeIValidatableObject no parece funcionar porqueValidate(..) No se llama.

¿Alguien sabe si hay algo más que deba conectar para que esto funcione?

EDITAR:

Aquí está el código solicitado.

public class LoginModel : IValidatableObject
{
    [Required]
    [Description("Email Address")]
    public string Email { get; set; }

    [Required]
    [Description("Password")]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [DisplayName("Remember Me")]
    public bool RememberMe { get; set; }

    public int UserPk { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var result = DataContext.Fetch( db => {

            var user = db.Users.FirstOrDefault(u => u.Email == Email);

            if (user == null) return new ValidationResult("That email address doesn't exist."); 
            if (user.Password != User.CreateHash(Password, user.Salt)) return new ValidationResult("The password supplied is incorrect.");

            UserPk = user.UserPk;
            return null;
        });

        return new List<ValidationResult>(){ result };
    }
}

La acción. (No hago nada especial en el controlador ...)

[HttpPost]
public ActionResult Login(LoginModel model)
{
    if (ModelState.IsValid)
    {
        FormsAuthentication.SetAuthCookie(model.Email, model.RememberMe);
        return Redirect(Request.UrlReferrer.AbsolutePath);
    }

    if (ControllerContext.IsChildAction || Request.IsAjaxRequest())
        return View("LoginForm", model);

    return View(model);
}

Establecí un punto de quiebre en la primera línea deLoginModel.Validate() y no parece ser golpeado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta