Has anyone managed to get a custom IMessageInterpolator working to enable customisation of error messages. I have tried following the instructions on this web page but to no avail. http://codelog.climens.net/2009/03/04/nhibernate-validator-custom-messages/
Looking into the code the DefaultMessageInterpolator seems pretty baked into the framework so is there anything I am missing.
I have included my unit tests to show how I am implementing it.
namespace TestValidator
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestValidator()
{
var customer = new Customer();
ClassValidator classValidator = new ClassValidator(customer.GetType());
InvalidValue[] validationMessages = classValidator.GetInvalidValues(customer);
Assert.IsTrue(validationMessages.Length == 1);
Assert.IsTrue(validationMessages[0].Message == "may not be null or empty");
}
[TestMethod]
public void TestCustomInterpolator()
{
ValidatorEngine ve = new ValidatorEngine();
NHVConfiguration nhvc = new NHVConfiguration();
nhvc.Properties[Environment.MessageInterpolatorClass] = typeof(CustomMessageInterpolator).AssemblyQualifiedName;
ve.Configure(nhvc);
var customer = new Customer();
ClassValidator classValidator = new ClassValidator(customer.GetType());
InvalidValue[] validationMessages = classValidator.GetInvalidValues(customer);
Assert.IsTrue(validationMessages.Length == 1);
// THIS TEST FAILS!!
Assert.IsTrue(validationMessages[0].Message == "CustomMessageInterpolator");
}
}
public class Customer
{
public virtual int CustomerId { get; set; }
[NotNullNotEmpty]
public string CustomerName { get; set; }
}
public class CustomMessageInterpolator : IMessageInterpolator
{
public CustomMessageInterpolator()
{
}
public string Interpolate(string message, IValidator validator, IMessageInterpolator defaultInterpolator)
{
return "CustomMessageInterpolator";
}
}
}