У меня есть приложение MVC 5, которое использует какую-то часть EF Core для доступа к базе данных. Я использую шаблон SimpleInjector и Repository.
Я зарегистрировал свой MainContext как
container.Register(() => new MainContext(), Lifestyle.Scoped);
container.Register<IARSMLayer,ARSMLayer>(Lifestyle.Scoped);
Итак, из документации я ожидаю, что SI отвечает за жизнь MainContext.
Внутри моего кода я инициализирую его как
public ARSMLayer(IARSMLayerRepository arsmLayerRepository, IALayerOld aLayer, MainContext mainContext, ILog log)
{
this.aLayer = aLayer;
this.mainContext = mainContext;
this.log = log;
}
и после загрузки данных я нажимаю кнопку, которая использует MainContext для выполнения операций.
Если я повторно нажму кнопку во второй раз, я получу следующее исключение
System.ObjectDisposedException: 'Невозможно получить доступ к удаленному объекту. Обычный
Причиной этой ошибки является удаление контекста, который был разрешен путем внедрения зависимости, а затем попытка использовать тот же экземпляр контекста в другом месте вашего приложения. Это может произойти, если вы вызываете Dispose () для контекста или заключаете контекст в оператор using. Если вы используете внедрение зависимостей, вы должны позволить контейнеру внедрения зависимостей избавиться от экземпляров контекста.
Имя объекта: 'MainContext'. '
Теперь я проверил, и когда я нажал на кнопку, у меня появился другой объект MainContext, поэтому я не понимаю, почему он говорит, что имеет доступ к удаленному объекту
КСТАТИ не должно было быть "безопасным", поскольку он зарегистрирован как область действия?
Здесь выдается исключение
public int GetAxParentela(int idParentela)
{
var recordParentela = mainContext.GradoParentela.Where(m => m.IdGradoParentela == idParentela).Single(); //HERE
return recordParentela.IdAx.HasValue ? recordParentela.IdAx.Value : -1;
}