任何.NET Fluent Argument检查那里的库?

时间:2010-08-03 02:15:59

标签: c# .net fluentvalidation fluentvalidation-2.0

同时查看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

:)

5 个答案:

答案 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.ValidationProject)。它是一个快速,可扩展,直观且易于使用的C#库,为参数验证提供了流畅的API。提供在.NET应用程序中实现防御性编程所需的一切。