- 我正在使用 asp.net mvc 3,具有 IoC 结构图的实体框架。
- 我有自己的自定义会员提供商。
- 当我使用 StructureMap 注入 dbcontext 对象和成员资格实例时,我遇到了同样的问题,因此为我的 UserRepository 删除了它。
- UserRepository 现在有一个在构造函数中初始化的 DBContext 属性。
每次创建/更新新用户时(这样做的方法是将 dbcontext 对象包装在 using 语句中),下次引用 dbcontext 时,我会抛出 ObjectDisposedException。
我不明白我做错了什么。显然,成员资格提供程序类不会在每次需要它时实例化 userRepository 对象,并且当更新用户时,由于 using 语句而释放了上下文。但我认为这是标准做法?
任何帮助是极大的赞赏。
编辑:
真的没有复杂的代码。设置是:
CustomMembershipProvider 会覆盖标准的 Membership 提供程序(配置文件有详细信息)。CustomMembershipProvider 使用 IUserService 对象,该对象使用由 UserRepository 实现的 IUserRepository,该对象在类级别具有 DBContext 私有对象。
在 UserRepository 中,我有:
public void UpdateUser(User user)
{
using(_db)
{
... code to indicate that the user state has changed
_db.SaveChanges();
}
}
运行此代码后,请求就完成了。但是,当发出另一个请求以检索角色信息或从数据库中读取用户(在 UserRepository 类中)时,我会抛出 ObjectDisposedException。此时,与用户或角色相关的任何内容都不起作用,因为它们使用相同的 UserRepository 类,其 _db 变量已由 UpdateUser 处理。
我最初让 StructureMap 解析 DBContext 对象、customMembership 对象等,但后来不得不将其从 StructureMap 的映射中删除。