我一直在使用EntityFramework。到目前为止,我只在离散使用块中使用了EF DBContext。我现在正在尝试使用请求范围依赖注入。 Unity似乎是最简单的,但我不确定我是否正确使用它。
到目前为止,我已经创建了一个示例存储库和服务类(具有相应的接口)。我在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>
属性修饰,它是否只是弄清楚了这一点?
答案 0 :(得分:1)
供参考:https://msdn.microsoft.com/en-us/library/ff660872%28v=pandp.20%29.aspx