- Я использую asp.net mvc 3, инфраструктуру сущностей с структурной картой для IoC.
- У меня есть свой собственный поставщик членства.
- У меня была такая же проблема, когда я внедрял объект dbcontext и экземпляры членства, используя StructureMap, поэтому удалил это для моего UserRepository.
- У UserRepository теперь есть свойство DBContext, которое инициализируется в конструкторе.
Каждый раз, когда создается / обновляется новый пользователь (метод, который делает это, оборачивает объект dbcontext в оператор using), в следующий раз при обращении к dbcontext я получу исключение ObjectDisposedException.
Я не понимаю, что я делаю неправильно.Очевидно, что класс провайдера членства не создает экземпляр объекта userRepository каждый раз, когда он ему нужен, и когда пользователь обновляется, контекст удаляется из-за оператора using.Но я думал, что это стандартная практика?
Любая помощь очень ценится.
РЕДАКТИРОВАНИЕ:
На самом деле сложного кода не существует.Настройка:
CustomMembershipProvider переопределяет стандартного поставщика членства (файл конфигурации содержит подробности).CustomMembershipProvider использует объект IUserService, который использует IUserRepository, который реализован UserRepository, который имеет частный объект 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.