C#でMVVMプロジェクトがあり、その中でコードコントラクトを使用したいと思います。これが私のシナリオです:インターフェース:
public interface IC042_Model
{
void Save(C042 entity);
void Delete(C042 entity);
}
次に、コントラクトの抽象クラスがあります。
[ContractClassFor(typeof(IC042_Model))]
internal abstract class C042_Model_Contracts : IC042_Model
{
public void Save(C042 entity)
{
Contract.Requires(entity != null);
}
public void Delete(C042_CondicaoPagamento entity)
{
Contract.Requires(entity != null);
}
}
別のプロジェクトでは、私のモデルがインターフェースを実装しており、いずれかのメソッドでthis.Save(null)を呼び出すと、警告が生成されます。私のViewModelで、上記と同じメソッドthis.Save(null)を呼び出すと、警告は生成されませんが、アプリケーションを実行すると、上記の行でコントラクト例外が発生します。
私のアプローチに何か問題がありますか?
前もって感謝します。
誰もが理解しやすいと思う別の例を作成しました。
クラスライブラリプロジェクトで次のクラスを作成しました。
public static class StringExtensions
{
public static string TrimAfter(string value, string suffix)
{
Contract.Requires(suffix != (string)null);
Contract.Requires(!string.IsNullOrEmpty(suffix));
Contract.Requires(value != null);
var index = value.IndexOf(suffix);
if (index < 0)
return value;
return value.Substring(0, index);
}
}
以下のようなWPFプロジェクトから呼び出すと:
CodeDigging.StringExtensions.TrimAfter(null, null);
契約がフルフィールドではないという警告は表示されません。
それが私の問題です、私はそれが今より明確になることを願っています。
ありがとう。