Ninject Web应用程序:所有绑定都应该是InRequestScope()?

时间:2012-11-15 08:35:33

标签: c# asp.net asp.net-mvc ninject

我有一个用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应用程序? (我不会超载服务器的内存)

2 个答案:

答案 0 :(得分:3)

对于MVC应用程序,您的配置正常。如果在默认的瞬态范围或请求范围中绑定存储库,则没有太大区别。正如@Mark在瞬态范围中所述,您的依赖关系将被注入为有界对象的新实例,但在事务范围中,它们将按请求创建一次。我更喜欢请求范围并推荐它,如果你想(例如)你的存储库上的每个请求缓存。

答案 1 :(得分:1)

您可以按原样保留存储库。默认范围是这样的:只要需要IProductRepository,就会创建一个新实例。