Я новичок в Code Contracts и у меня есть вопрос о том, как интегрировать его с IoC.
Я пытался использовать Code Contracts в простой тестовой программе (классический проект consolle), но теперь я хотел бы использовать его в своих официальных проектах.
Вопрос заключается в следующем: если у меня есть контейнер, который предоставляет мой интерфейс службы в методе конструктора класса, как я могу использовать кодовые контракты для проверки переданных значений?
Классический сценарий может быть
[ContractClass(typeof(ArticoliBLLContract))]
public interfare IMyInterface
{
void method1(int a)
void method2(string b)
void method3(bool c)
}
[ContractClassFor(typeof(IArticoliBLL))]
public abstract class MyContractsClass : IMyInterface
{
public void method1(int a)
{
Contract.Requires<ArgumentOutOfRangeException>(a > 0,"a must be > 0");
}
public void method2(string b)
{
Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(b),"b must be not empty");
}
public void method3(bool c)
{
Contract.Requires<ArgumentOutOfRangeException>(c == true,"c must be true");
}
}
public class MyClass : IMyInterface
{
private ITFactory _factory = null;
private IMyDAL _myDAL = null;
public MyClass(ITFactory factory,IMyDAL myDAL)
{
if (factory == null)
throw new ArgumentNullException("factory");
if (myDAL == null)
throw new ArgumentNullException("myDAL");
_factory = factory;
_myDAL = myDAL;
}
public void method1(int a)
{
a = a*2;
}
public void method2(string b)
{
b = b + "method2";
}
public void method3(bool c)
{
c = false;
}
}
В этом сценарии, где я могу проверить "factory" и "myDAL"?
Есть ли способ поместить контракты в абстрактный класс, чтобы сохранить его в том же классе?
Спасибо !!!