我有一个这样表达的代码合同 - 它验证要存储的实体不为空并且对持久性有效。有用。晶圆厂。
[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 包括在内以明确表示 - 如果我省略它,它将被隐式调用,但我认为它使我的问题更清楚。
问题是,代码合同不允许这样做,我收到以下消息。
合同调用的用户消息只能是字符串文字、静态字段或至少在内部可见的静态属性。
有没有办法在异常消息中包含特定数据?