2010-08-03 8 views
9

mientras mira a Shrinkr 's código fuente (código fuente que toda opinión del otro proyecto para aprender, ¿no ??? :)) me di cuenta el siguiente código kewl .. (abreviado por mí, a continuación)Cualquier .NET Fluent Argument revisando bibliotecas por ahí?

public virtual Foo Foo 
{ 
    get; 
    set 
    { 
     Check.Argument.IsNotNull(value, "value"); 
     // then do something. 
    } 
} 

Note la fluidez forma en que comprobar si hay argumentos? Agradable :)

alt text http://cherrythian.com/images/borat.jpg

Así que .. comprobar el código, de lo que cabe a medida que hace esto ...

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 .... 
} 

¿Hay marcos comunes por ahí?

joya instalar netFluentCheck?

:)

Respuesta

6

Terminé usando CuttingEdge Conditions, que se encuentra en CodePlex.

por ejemplo.

// Check all preconditions: 
Condition.Requires(id, "id") 
    .IsNotNull()   // throws ArgumentNullException on failure 
    .IsInRange(1, 999) // ArgumentOutOfRangeException on failure 
    .IsNotEqualTo(128); // throws ArgumentException on failure 

agradable :)

+3

CuttingEdge.Conditions es el shizzle ;-) – Steven

1

Here's one que utiliza expresiones. Ya que es bastante trivial, todo el mundo parece tener su propia implementación de esta ...

+0

Su enlace está muerto. –

+4

@ M.Babcock Pruebe archive.org. Mi respuesta tiene más de 4 años. No se puede esperar seriamente mi mantener todos mis 1600+ respuestas aquí desde 2008. –

1
+0

FluentValidation se hace para la validación de los objetos y no para la validación de argumentos – BoeseB

+2

lo uso FluentValidation para la validación de los argumentos de ASP.NET MVC de acción, que son objetos si el modelo está fuertemente tipado. Habrá muchas opciones.Es solo una de las herramientas disponibles, así que pensé que la pondría allí en caso de que ayudara a alguien. –

1

Aquí está una clase simple sólo unas pocas líneas de largo que escribí hace un tiempo (a partir de aquí: http://code.google.com/p/hotwire-queue/wiki/QuickAssert) que hace algo similar a la validación de fluidez, utiliza un estilo un poco diferente que yo encontrar un poco más fácil de leer (ymmv). No requiere ninguna biblioteca de terceros, y si la validación falla, se obtiene un mensaje de error simple con el código exacto que falló.

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); 

a esto:

config.Ensure(c => c.Active, 
       c => c.RootServiceName == "test-animals", 
       c => c.MethodValidation == MethodValidation.afterUriValidation, 
       c => c.Endpoints != null && c.Endpoints.Count() == 2); 

Aquí está la clase, la esperanza es útil como punto de partida para alguien; -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()); 
     } 
    } 
} 

En el momento de escribir Asegurar, contratos de código eran no admitido en Visual Studio 2010, pero ahora son, ver http://msdn.microsoft.com/en-us/magazine/hh148151.aspx

1

Usted puede intentar Bytes2you.Validation (Project). Es una biblioteca de C# rápida, extensible, intuitiva y fácil de usar que proporciona API fluidas para la validación de argumentos. Da todo lo que necesita para implementar programación defensiva en su aplicación .NET.

Cuestiones relacionadas