我有一个用asp.net mvc制作的web应用程序,我正在使用Ninject来绑定接口。
现在,我有这个:
// Db Context
kernel.Bind<DbContext>().To<DbEntities>().InRequestScope();
// Repositories - which are using instance of DbEntities
kernel.Bind<ICustomerRepository>().To<CustomerRepository>();
kernel.Bind<IProductRepository>().To<ProductRepository>();
// Services - which are using instances of Repositories
kernel.Bind<ICustomerService>().To<CustomerService>();
kernel.Bind<IProductService>().To<ProductService>();
我将DbContext绑定到RequestScope中的DbEntities,因为我想在同一个Web请求中使用相同的DbContext。之后它应该处理它。
但其他绑定应该如何?它们是如何默认的?
例如IProductRepository
的实例DbContext
(每个请求一个),也应该是InRequestScope()
?
IProductService
的实例为IProductRepository
绑定应如何适用于Web应用程序? (我不会超载服务器的内存)
答案 0 :(得分:3)
对于MVC应用程序,您的配置正常。如果在默认的瞬态范围或请求范围中绑定存储库,则没有太大区别。正如@Mark在瞬态范围中所述,您的依赖关系将被注入为有界对象的新实例,但在事务范围中,它们将按请求创建一次。我更喜欢请求范围并推荐它,如果你想(例如)你的存储库上的每个请求缓存。
答案 1 :(得分:1)
您可以按原样保留存储库。默认范围是这样的:只要需要IProductRepository
,就会创建一个新实例。