Я хотел бы использовать CodeContracts для проверки некоторых конкретных реализаций универсального интерфейса. я имел основной общий интерфейсCodeContracts для определенного общего интерфейса
public interface IEnityMap<in TSource,out TDest>
{
TDest Map(TSource);
}
Я хочу, чтобы определить CodeContracts для некоторых конкретных интерфейсов. Я пытаюсь сделать что-то вроде этого:
[ContractClass(typeof(ContractClass))]
public interface ISpecific: IEntityMap<SourceClass,DestClass>{}
[ContractClassFor(typeof(ISpecific))]
public abstract class ContractClass: ISpecific
{
public DestClass Map(SourceClass source)
{
Contract.Requires(source.SomeProperty!= null);
//Other checks
return default(DestClass);
}
}
Мой класс Mapping реализует общий интерфейс - IEntityMap <,> (не ISpecific) и этот контракт делает `t работу.
Было бы сложно определить '.SomeProperty' здесь. Но вы можете легко попробовать это и узнать. –
Модульные тесты показали, что такой контракт не работает, даже если класс реализует интерфейс ISpecific –