【发布时间】:2014-07-17 17:34:58
【问题描述】:
我有一个使用 Entity Framework 的 MVC 3 应用程序,我在其中设置了自定义角色提供程序。
我的角色提供者依赖于存储库,而该存储库依赖于 DbContext。
我在 app start 方法中将我的上下文和存储库注册为已实现的接口 - 每个 http 请求的实例。
我最初尝试在我的自定义角色提供程序中使用 Initialize 方法来使用服务定位器模式解决存储库依赖关系并将其设置为类的属性:
DependencyResolver.Current.GetService<IMyRepository>();
存储库可以毫无问题地解决,但是我收到一个异常,指出 DbContext 已被释放。
我已经能够通过改变两件事来解决这个问题:
- 将存储库和上下文都注册为每个依赖项而不是每个 http 请求的实例。
- 在每次调用角色提供者的方法时,通过对属性使用 getter 而不是在 initialize 方法中调用一次来解决存储库依赖关系。
所以现在这一切似乎都可以正常工作,但是,即使在阅读了有关 autofac 生命周期范围的各种文章之后,我也不完全理解为什么。
*即将推出的代码示例
我唯一的理论是角色提供者在发出 http 请求之前启动,因此,当使用每个 http 请求的实例时 - 角色提供者正在解析先前请求的实例,而这些实例已经被释放?
【问题讨论】:
标签: c# asp.net-mvc entity-framework autofac