关于web api统一性和存储库生命周期的建议

时间:2014-02-19 16:08:00

标签: unity-container asp.net-web-api

我只是用web api and unity运行一些测试,我创建了一个简单的产品库并用团结注册了

public class ProductRepository : IProductRepository
{
    private List<Product> products = new List<Product>();
    private int _nextId = 1;

    public ProductRepository()
    {
        Add(new Product { Name = "Tomato soup", Category = "Groceries", Price = 1.39M });
        Add(new Product { Name = "Yo-yo", Category = "Toys", Price = 3.75M });
        Add(new Product { Name = "Hammer", Category = "Hardware", Price = 16.99M });
    }

    public IEnumerable<Product> GetAll()
    {
        return products;
    }
    ... etc

 container.RegisterType<IProductRepository, ProductRepository>((new HierarchicalLifetimeManager()));

实例化时,产品存储库会自行填充3个产品,以便调用产品 api / Products返回所有产品。

控制器已初始化

 private IProductRepository _repository;

    public ProductsController(IProductRepository repository)
    {
        _repository = repository;
    }

使用HierarchicalLifetimeManager我期待如果我放入控制器然后随后得到之前放置的项目将存在,情况并非如此,并且每次调用都会初始化存储库,我是目前只进行原型设计,所以不想要dbcontext,但希望存储库状态能够持续存在多个调用,我认为是单例。关于它如何工作或我应该做什么的任何指示?

1 个答案:

答案 0 :(得分:0)

尝试使用ContainerControlledLifetimeManager。来自http://msdn.microsoft.com/en-us/library/dn178463(v=pandp.30).aspx#sec34

  

RegisterType方法的默认生命周期管理器是TransientLifetimeManager,RegisterInstance方法的默认生命周期管理器是ContainerControlledLifetimeManager。如果希望容器在调用Resolve方法时创建或返回类型的单例实例,则可以在注册类型或实例时使用ContainerControlledLifetimeManager类型。