同时查看Shrinkr的源代码(我们都会查看其他项目的源代码来学习,对吧??? :))我注意到以下的密码...(以下简称)
public virtual Foo Foo
{
get;
set
{
Check.Argument.IsNotNull(value, "value");
// then do something.
}
}
注意他们检查参数的流畅方式?尼斯:)
alt text http://cherrythian.com/images/borat.jpg
所以..检查代码,他们有一些自定义类来执行此操作...
public static class Check
{
public static class Argument
{
public static void IsNotNull(object parameter,
string parameterName)
{ ... }
public static void IsNotNullOrEmpty(string parameter,
string parameterName)
{ ... }
.... etc ....
}
那里有没有共同的框架?
gem install netFluentCheck ?
:)
答案 0 :(得分:6)
我最终使用了{Code}上的CuttingEdge Conditions。
例如
// Check all preconditions:
Condition.Requires(id, "id")
.IsNotNull() // throws ArgumentNullException on failure
.IsInRange(1, 999) // ArgumentOutOfRangeException on failure
.IsNotEqualTo(128); // throws ArgumentException on failure
很好:)
答案 1 :(得分:2)
答案 2 :(得分:1)
Here's one。由于它非常简单,每个人似乎都有自己的实现......
答案 3 :(得分:1)
这是一个简单的类,我前一段时间写的只有几行(从这里:http://code.google.com/p/hotwire-queue/wiki/QuickAssert)执行类似于流畅验证的东西,使用稍微不同的样式,我觉得它更容易阅读(因人而异)。不需要任何第三方库,如果验证失败,您将收到一条简单的错误消息,其中包含失败的确切代码。
config.Active.Should().BeTrue();
config.RootServiceName.Should().Be("test-animals");
config.MethodValidation.Should().Be(MethodValidation.afterUriValidation);
var endpoints = config.Endpoints;
endpoints.Should().NotBeNull().And.HaveCount(2);
到此:
config.Ensure(c => c.Active,
c => c.RootServiceName == "test-animals",
c => c.MethodValidation == MethodValidation.afterUriValidation,
c => c.Endpoints != null && c.Endpoints.Count() == 2);
这是班级,希望它有助于作为某人的起点;-D
using System;
using System.Linq.Expressions;
using NUnit.Framework;
namespace Icodeon.Hotwire.Tests.Framework
{
public static class QuickAssert
{
public static void Ensure<TSource>(this TSource source, params Expression<Func<TSource, bool>>[] actions)
{
foreach (var expression in actions)
{
Ensure(source,expression);
}
}
public static void Ensure<TSource>(this TSource source, Expression<Func<TSource, bool>> action)
{
var propertyCaller = action.Compile();
bool result = propertyCaller(source);
if (result) return;
Assert.Fail("Property check failed -> " + action.ToString());
}
}
}
在我编写确保时,Visual Studio 2010不支持代码契约,但现在,请参阅http://msdn.microsoft.com/en-us/magazine/hh148151.aspx
答案 4 :(得分:1)
您可以尝试Bytes2you.Validation(Project)。它是一个快速,可扩展,直观且易于使用的C#库,为参数验证提供了流畅的API。提供在.NET应用程序中实现防御性编程所需的一切。