我正在构建Asp.net Web API演示项目,我不想使用任何数据提供程序,既不是实体框架也不是Ado.net。
我构建了存储库,
public class ProductRepo : IProductRepo
{
private List<Product> products = new List<Product>();
private int _nextId = 1;
public ExternalProductDataRepo()
{
products.Add(new Product {Id=1, Name = "Toyata", Category = "Car", Price = 1.3M });
products.Add(new Product {Id=2, Name = "Ford", Category = "Car", Price = 3.75M });
products.Add(new Product {Id=3, Name = "Hammer", Category = "Hardware", Price = 16.99M });
}
public IEnumerable<Product> GetAll()
{
return products;
}
public Product Get(int id)
{
return products.Find(p => p.Id == id);
}
public Product Add(Product item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
item.Id = _nextId++;
products.Add(item);
return item;
}
public void Remove(int id)
{
products.RemoveAll(p => p.Id == id);
}
public bool Update(Product item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
int index = products.FindIndex(p => p.Id == item.Id);
if (index == -1)
{
return false;
}
products.RemoveAt(index);
products.Add(item);
return true;
}
}
但是,在每个应用程序点击中,都会创建一个新的ProductRepo类实例,所以即使我保存了数据,它也永远不会存在。
此外,我可以选择使用System.Web.Cache来保存Cache中的产品列表,但它用于不同的目的并且在有限的时间内,也使得隔离单元测试变得困难。那么,用产品CRUD操作构建连续演示项目的建议是什么?
答案 0 :(得分:2)
您希望您的存储库是单例。有多种方法可以实现这一点,但如果这个演示代码将以某种方式运行,我建议将依赖注入提供程序集成到您的代码中。例如,您可以使用unity。
如果您想要实现此路径,可以使用以下资源来帮助您入门:
在App_Start文件夹中,添加一个静态UnityConfig类:
gcc -rdynamic ./libfoo.so -Wl,-rpath=/home/user/foo -Wall -o test main.c -lfoo
在您的Global.asax文件中,添加以下行:public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType<<IProductRepo>,<ProductRepo>> (new ContainerControlledLifetimeManager());
container.Resolve<IProductRepo>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}