- Я использую 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. На этом этапе ничего, связанное с User или Role, не работает, потому что они используют тот же класс UserRepository, чья переменная _db была удалена UpdateUser.
Первоначально у меня StructureMap разрешал объект DBContext, объект customMembership и т. Д., Но с тех пор мне пришлось удалить его из сопоставления StructureMap.