我只是用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
,但希望存储库状态能够持续存在多个调用,我认为是单例。关于它如何工作或我应该做什么的任何指示?
答案 0 :(得分:0)
尝试使用ContainerControlledLifetimeManager。来自http://msdn.microsoft.com/en-us/library/dn178463(v=pandp.30).aspx#sec34。
RegisterType方法的默认生命周期管理器是TransientLifetimeManager,RegisterInstance方法的默认生命周期管理器是ContainerControlledLifetimeManager。如果希望容器在调用Resolve方法时创建或返回类型的单例实例,则可以在注册类型或实例时使用ContainerControlledLifetimeManager类型。