Динамическое добавление новых элементов в жестко запрограммированный репозиторий IQueryable - PullRequest
7 голосов
/ 18 сентября 2010

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

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

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

Ответы [ 2 ]

13 голосов
/ 18 сентября 2010

Просто сохраните Список в поле типа Список вместо 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(); }
    }
}
5 голосов
/ 18 сентября 2010

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

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;
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...