У меня есть какой-то фабричный метод
public T Create<T> () where T : class
{
Contract.Ensures(Contract.Result<T>() != null);
T result = this.unityContainer.Resolve<T>();
return result;
}
Я пытаюсь создать проект, который я получаю предупреждение:
CodeContracts: обеспечивает недоказанность: Contract.result () ! = NULL
Я понимаю, что интерфейс IunityContainer не имеет никаких договоров, поэтому кодовые контракты считают, что варьируемые могут быть нулевыми, и нет способа доказать, что создание () вернет не нулевой результат.
Как в этом случае я могу сделать кодовые контракты верять, что Результат Результат Переменная не нулевая?
Я впервые попытался позвонить Conture.assert
public T Create<T> () where T : class
{
Contract.Ensures(Contract.Result<T>() != null);
T result = this.unityContainer.Resolve<T>();
Contract.Assert(result != null);
return result;
}
, но это требует меня другое предупреждение:
CodeContracts: Assert donfoven
Я попробовал сделать чек на NULL, и это делает все предупреждения:
public T Create<T> () where T : class
{
Contract.Ensures(Contract.Result<T>() != null);
T result = this.unityContainer.Resolve<T>();
if (result == null)
{
throw new InvalidOperationException();
}
return result;
}
, но я не уверен, что это хорошее решение, чтобы бросить исключение вручную. Может быть, есть какой-то способ решить проблему только с использованием кодовых контрактов?
Спасибо.