Настройка сообщений об исключениях из кода
У меня есть код контракта, который выражается следующим образом: он проверяет, что сущность, которая должна быть сохранена, не равна нулю и действительна для сохранения Оно работает. 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);
}
}
Тем не менее, я хотел бы, чтобы исключение было более полезным - поскольку любой, получающий сообщение, захочет узнать, какой объект был недействительным и как выглядит. Все сущности переопределяют ToString (), поэтому я хотел включить это в сообщение об ошибке:
Contract.Requires<InvalidEntityException>(entity.IsValidForPersistence(), "Entity not valid for persistence " + entity.ToString());
Я включил ToString, чтобы быть явным - он будет вызываться неявно, если я его опущу, но я думаю, что это делает мой вопрос более понятным.
Проблема в том, что это не разрешено контрактами кода, и я получаю следующее сообщение.
User message to contract call can only be string literal, or a static field, or static property that is at least internally visible.
Есть ли способ включить определенные данные в сообщение об исключении?