Personalização de mensagens de exceção de contrato de código
Eu tenho um contrato de código expressa como isso - ele valida que a entidade a ser armazenada não é nula e é válida para a persistência. Funciona. Fab.
[ContractClassFor(typeof(IRepository<,>))]
internal abstract class ContractsForIRepository<T, TId> : IRepository<T, TId> where T : IEntity
{
private ContractsForIRepository()
{
}
public T Persist(T entity)
{
Contract.Requires<InvalidEntityException>(entity != null, "Entity is null");
Contract.Requires<InvalidEntityException>(entity.IsValidForPersistence(), "Entity not valid for persistence");
return default(T);
}
}
No entanto, gostaria que a exceção fosse mais útil - como qualquer pessoa que recebe a mensagem vai querer saber qual entidade é inválida e qual é a aparência dela. Todas as entidades substituem ToString (), então eu queria incluir isso na mensagem de erro:
Contract.Requires<InvalidEntityException>(entity.IsValidForPersistence(), "Entity not valid for persistence " + entity.ToString());
Eu incluí o ToString para ser explícito - ele seria chamado implicitamente se eu o omitisse, mas acho que isso torna minha pergunta mais clara.
O problema é que isso não é permitido por contratos de código e recebo a seguinte mensagem.
A mensagem do usuário para chamada de contrato pode ser apenas literal de string, ou um campo estático ou propriedade estática que é pelo menos visível internamente.
Existe alguma maneira de incluir dados específicos na mensagem de exceção?