2010-09-18 6 views
7

Creación de una aplicación, antes de utilizar una base de datos real, sólo para obtener las cosas funcionan primero que puedo utilizar una lista codificada como una falsificación, en memoria repositorio:La adición de nuevos elementos de forma dinámica a IQueryable modificable repositorio falsa

public class FakeProductsRepository 
{ 
    private static IQueryable<Product> fakeProducts = new List<Product> { 
     new Product{ ProductID = "xxx", Description = "xxx", Price = 1000}, 
     new Product{ ProductID = "yyy", Description = "xxx", Price = 2000}, 
     new Product{ ProductID = "zzz", Description = "xxx", Price = 3000} 
    }.AsQueryable(); 

    public IQueryable<Product> Products 
    { 
     get { return fakeProducts; } 
    } 
} 

¿Cómo agregar un método a esta clase para agregar elementos nuevos, no codificados de forma rígida en esta lista de forma dinámica?

Respuesta

13

Sólo mantener la Lista <Producto> en un campo de la lista Tipo de Producto < > en lugar de IQueryable <Producto>:

public class FakeProductsRepository 
{ 
    private readonly List<Product> fakeProducts = new List<Product> 
    { 
     new Product { ProductID = "xxx", Description = "xxx", Price = 1000 }, 
     new Product { ProductID = "yyy", Description = "xxx", Price = 2000 }, 
     new Product { ProductID = "zzz", Description = "xxx", Price = 3000 }, 
    }; 

    public void AddProduct(string productID, string description, int price) 
    { 
     fakeProducts.Add(new Product 
     { 
      ProductID = productID, 
      Description = description, 
      Price = price, 
     }); 
    } 

    public IQueryable<Product> Products 
    { 
     get { return fakeProducts.AsQueryable(); } 
    } 
} 
+0

Gracias! Y cómo crear el método ** AddProduct ** para que contenga como parámetro no el objeto ** Producto **, sino las variables: ** ProductID **, ** Description ** y ** Price **? – rem

+0

Use "' new Product' "dentro de' AddProduct'. Las interfaces –

5

Si va a burlarse de su repositorio para propósitos de prueba a continuación, me gustaría sugerir que comiences por declarar una interfaz que abarque las funciones que esperas de tu repositorio. Luego construya su repositorio real y su repositorio "falso" para implementar esa interfaz, de lo contrario no podrá sustituir fácilmente uno por el otro.

Usted encontrará que es bastante fácil una vez que usted tiene interfaz consistente, ya se declararán las funciones, es decir

public interface IRepository { 
    IQueryable<Products> GetAllProducts(); 
    Product AddProduct(Product Product); 
} 

public class FakeRepository : IRepository { 
    private static IList<Product> fakeProducts = new List<Product> { 
     new Product{ ProductID = "xxx", Description = "xxx", Price = 1000}, 
     new Product{ ProductID = "yyy", Description = "xxx", Price = 2000}, 
        new Product{ ProductID = "zzz", Description = "xxx", Price = 3000} 
    }; 

    public IQueryable<Product> GetAllProducts() { 
     return fakeProducts.AsQueryable(); 
    } 

    public Product Add(Product Product) { 
     fakeProducts.Add(Product); 
     return Product; 
    } 
} 
+0

son increíbles – bkwdesign

Cuestiones relacionadas