【发布时间】:2011-03-07 14:08:12
【问题描述】:
好的,我之前已经就此问过一些问题,但我真的很难理解这一点。
我正在使用 Service/Repository/EF 4 w/Pocos 方法,我设置了 Ninject 并将服务注入控制器,但我试图找出在哪里注入上下文?
我希望能够在控制器上使用多个服务,而这些服务又可以使用相同的上下文访问多个存储库,因此所有更改都会一次持久化。
我研究了 UnitOfWork 模式,但我不明白 MVC(控制器)将如何实现这一点,因为他们只知道服务层和域实体。
编辑
正如 Mohamed 下面建议的那样,将上下文注入到存储库中,然后使用它的每个请求实例。如何在 MVC 应用程序中配置绑定?我会假设是这样的:
Bind(Of IContext).To(MyDataContext)
问题是,MVC 应用程序对上下文一无所知,对吧?
编辑 2
Public Class ProductController
Private _Service As IProductService
Public Sub New(Service As IProductService)
_Service = Service
End Sub
End Class
Public Class NinjectWebModule
Public Sub New()
Bind(Of IProductService).To(ProductService)
End Sub
End Class
Public Interface IProductService
End Interface
Public Class ProductService
Implements IProductService
Private _Repository As IRepository(Of Product)
Public Sub New(Repository As IRepository(Of Product))
_Repository = Repository
End Sub
End Class
Public Class NinjectServiceModule
Public Sub New()
Bind(Of IRepository(Of Product)).To(EFRepository(Of Product))
End Sub
End Class
Public Interface IRepository(Of T As Class)
End Interface
Public Class EFRepository(Of T As Class)
Implements IRepository(Of T)
Private _UnitOfWork As MyUnitOfWork
Public Sub New (UnitOfWork As IUnitOfWork)
_UnitOfWork = UnitOfWork
End Sub
End Class
Public Class NinjectRepositoryModule
Public Sub New()
Bind(Of IUnitOfWork).To(EFUnitOfWork).InRequestScope()
End Sub
End Class
Public Interface IUnitOfWork
Sub Commit()
End Interface
Public Class EFUnitOfWork()
Implements IUnitOfWork
Public Property Context As MyContextType
Public Sub New()
_Context = New MyContextType
End Sub
End Class
然后我会从 MVC 应用注册所有三个模块?
【问题讨论】:
标签: asp.net-mvc