我一直在使用EntityFramework很短的時間。直到現在,我只在離散使用塊中使用了EF DBContext。我現在試圖使用請求範圍依賴注入。 Unity似乎是最簡單的,但我不確定我是否正確使用它。使用EF DBContext和Unity.Mvc5的正確方法
到目前爲止,我已經創建了一個樣本庫和服務類(具有相應的接口)。我在Unity註冊這些,像這樣......
Public Shared Sub RegisterComponents()
Dim container = New UnityContainer()
container.RegisterType(Of IMyService, MyService)()
container.RegisterType(Of IRepository(Of MyModel), MyRepository)()
DependencyResolver.SetResolver(New UnityDependencyResolver(container))
End Sub
我的倉庫看起來像這樣...
Public Class MyRepository
Implements IRepository(Of EF.MyModel)
<Dependency>
Public Property Context() As MyDBEntities
Public Function Create(item As MyModel) As Boolean Implements IRepository(Of MyModel).Create
Context.MyModel.Add(item)
Return Context.SaveChanges() > 0
End Function
Public Function Delete(id As Integer) As Boolean Implements IRepository(Of MyModel).Delete
Context.MyModel.Remove([Get](id))
Return Context.SaveChanges() > 0
End Function
Public Function [Get](id As Integer) As MyModel Implements IRepository(Of MyModel).Get
Return Context.MyModel.Find(id)
End Function
Public Function List() As IQueryable(Of MyModel) Implements IRepository(Of MyModel).List
Return Context.MyModel
End Function
End Class
我的服務類包括以下參考庫...
<Dependency>
Public Property Repository() As IRepository(Of MyModel)
目前服務類的其餘部分幾乎只是存儲庫方法的一個包裝,但最終會有更多的高級功能。
在我的控制器中我引用我的服務是這樣的...
<Dependency>
Public Property MyModelService() As IMyService
反正這一切似乎做工精細,我可以向查詢的資料庫,服務,或控制器級別隨時添加額外的比特,似乎有正確的上下文。不過,我不確定它將如何知道跟蹤和關閉DBContext,因爲它沒有明確註冊到Unity。
這是否只是因爲<Dependency>
屬性裝飾本身呢?