2010-09-18 1 views
7

Создание приложения, прежде чем использовать реальную базу данных, только чтобы получить вещи работать я могу первым использовать жестко запрограммированный список как подделка, в памяти хранилищу:Добавление новых элементов динамически IQueryable жестко закодированной поддельной хранилище

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

Как добавить метод в этот класс для добавления новых, а не жестко закодированных элементов в этом списке динамически?

ответ

13

Просто сохранить список < продукт > в поле списка типа < продукт > вместо IQueryable < продукта >:

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

Спасибо! И как построить метод ** AddProduct **, так как он содержит в качестве параметра не объект ** Продукт **, а переменные: ** ProductID **, ** Описание ** и ** Цена **? – rem

+0

Используйте «новый продукт» внутри 'AddProduct'. –

5

Если вы собираетесь поиздеваться репозиторий для тестирования, то я хотел бы предложить что вы начинаете с объявления интерфейса, который включает в себя функции, которые вы ожидаете от своего репозитория. Затем создайте свой реальный и ваш «поддельный» репозиторий для реализации этого интерфейса, иначе вы не сможете легко заменить его на другой.

Вы найдете, что это довольно легко, если у вас есть, что последовательный интерфейс, функции будут уже объявлены, т.е.

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

интерфейсы являются удивительными – bkwdesign

Смежные вопросы