我有一些工厂方法
public T Create<T> () where T : class
{
Contract.Ensures(Contract.Result<T>() != null);
T result = this.unityContainer.Resolve<T>();
return result;
}
当我尝试构建项目时,出现了以下警告:
CodeContracts: ensures unproven: Contract.Result() != null
我理解IUnityContainer接口没有任何契约,所以Code Contracts认为变量可能为空,并且没有办法证明Create()将返回非空结果。在这种情况下,我该如何让Code Contracts相信result变量不为空?我首先尝试调用Contract.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: 断言未被证明
我尝试检查 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;
}
但我不确定手动抛出异常是个好的解决方案。也许有一些方法只使用Code Contracts就能解决问题?
谢谢。