static ContextObject() { DefaultFormatter = MorestachioFormatterService.Default; DefaultFormatter.AddFromType(typeof(ObjectFormatter)); DefaultFormatter.AddFromType(typeof(Number)); DefaultFormatter.AddFromType(typeof(BooleanFormatter)); DefaultFormatter.AddFromType(typeof(DateFormatter)); DefaultFormatter.AddFromType(typeof(EqualityFormatter)); DefaultFormatter.AddFromType(typeof(LinqFormatter)); DefaultFormatter.AddFromType(typeof(ListExtensions)); DefaultFormatter.AddFromType(typeof(RegexFormatter)); DefaultFormatter.AddFromType(typeof(TimeSpanFormatter)); DefaultFormatter.AddFromType(typeof(StringFormatter)); DefaultFormatter.AddFromType(typeof(RandomFormatter)); DefaultFormatter.AddFromType(typeof(Worktime)); DefaultFormatter.AddFromType(typeof(Money)); DefaultFormatter.AddFromType(typeof(HtmlFormatter)); DefaultFormatter.AddFromType(typeof(LoggingFormatter)); DefaultDefinitionOfFalse = value => value != null && value as bool? != false && // ReSharper disable once CompareOfFloatsByEqualityOperator value as double? != 0 && value as int? != 0 && value as string != string.Empty && // We've gotten this far, if it is an object that does NOT cast as enumberable, it exists // OR if it IS an enumerable and .Any() returns true, then it exists as well (!(value is IEnumerable) || ((IEnumerable)value).Cast <object>().Any() ); DefinitionOfFalse = DefaultDefinitionOfFalse; }