我见过几个在业务逻辑中使用以下代码的示例站点核心应用程序:
Database database = Factory.GetDatabase(itemUri.DatabaseName);
Assert.IsNotNull(database, itemUri.DatabaseName);
return database.GetItem(attribute);
有人可以澄清这是否是一个站点核心约定。我只将 Assert 用于单元测试场景,但不在逻辑范围内。
谢谢。
我发现这篇文章解决了你的大部分问题。有几点很重要:
我认为同样重要的是要注意,我似乎在 Sitecore 博客中找到的许多示例都是无论如何都会发生异常的情况。因此,ArgumentIsNotNull
例如,如果要省略,那将导致 a NullObjectException
,因此 Assert 实际上会稍微清理一下。在您的情况下,如果数据库不可用,那也会导致问题。Assert 使得错误的原因很清楚。
这是一个可以在 sitecore.dll 中大量使用的约定。如果不满足该条件,它用于引发异常。
例如,如果您查看 Assert.IsTrue,如果不满足条件,系统将抛出“InvalidOperationException”
从 Search API 中反编译 a 方法我发现了这个。
Assert.IsTrue(local_0 != null, "SearchConfiguration is missing");
然后如果我们反编译 IsTrue,它会给我们
[AssertionMethod]
public static void IsTrue([AssertionCondition(AssertionConditionType.IS_TRUE)] bool condition, string message)
{
if (!condition)
throw new InvalidOperationException(message);
}
要回答您的其他问题,您可以在应用程序代码中使用它,因为您可以看到它只是在不满足条件时引发异常的另一种方式。
混淆与断言一词的使用有关,正如您所说,这通常出现在传统 c# .NET 解决方案中的单元测试上下文中。只要您知道 Sitecore 断言在幕后所做的事情,是否使用它取决于您。