4

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

4

2 回答 2

3

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

于 2012-11-15T19:42:15.150 回答
1

您可以将存储库保持原样。默认范围是这样的,即每当需要IProductRepository创建新实例时。

于 2012-11-15T09:33:42.660 回答