如何将登录集成到.net代码契约中

本文关键字:net 代码 契约 集成 登录 | 更新日期: 2023-09-27 18:11:45

我正在努力理解。net的代码契约。在使用代码契约时,如何记录导致相关方法失败的断言。例如,请看下面的代码:

  Public IsMatch(string x, string, y) 
{ 
    Contract.Assert(!string.IsNullOrWhiteSpace(x)); 
     Contract.Assert(!String.IsNullOrWhitespace(y));
       return x == y;
 }

x = string.Empty。这将导致该方法失败。如何记录断言导致上述方法失败的日志?我可以在一个大型应用程序中有许多这样的断言,如果知道哪个是麻烦制造者就好了。

如何将登录集成到.net代码契约中

使用代码契约时,如何记录导致相关方法失败的断言?

如果你说的是日志记录,我想你是指在运行时而不是静态验证。

断言失败时会引发异常。你可以写一个try/catch块来记录异常:

try
{
    bool result = SomeClass.IsMatch(x, y);
}
catch(Exception e)
{
    logger.Error(e.ToString()); // Use whatever logging mechanism here
    throw; // Note: Make sure you rethrow if you catch "Exception e"
}

这将为您提供异常的堆栈跟踪,它将指向断言失败的行。

正如Polity所提到的,您还可以在每个断言上包含一个userMessage参数。这样,除了堆栈跟踪之外,您的日志还将包含自定义错误消息。

如果你需要一个好的logger类,看看NLog库。

查看:http://msdn.microsoft.com/en-us/library/system.diagnostics.contracts.contract.aspx

作为第二个参数,你可以指定一条消息

也就是说,合同。Assert非常原始。使用Contract可以更好地检查Post条件。需要,因为它是你的方法的需求。

编辑:Post条件当然应该是前置条件