Prism Library Dryioc CreateScope - Нет доступа к удаленному объекту

У меня есть приложение Xamarin Forms с prism Dryioc 7.1, и я столкнулся со следующей проблемой: вторая операция началась в этом контексте до завершения предыдущей.

Итак, я подписался на этот пост # https://www.pmichaels.net/tag/a-second-operation-started-on-this-context-before-a-previous-operation-completed/

Это устранило мою проблему до тех пор, пока я не добавил страницы с вкладками в приложение XF, потому что все страницы с вкладками инициализируются одновременно, у меня есть классы параллельных служб, обращающихся к моему DBContext, и я предполагал, что это разные экземпляры, по крайней мере, когда они созданы, у них другой GUID, однако кажется, что каждый раз, когда мой DBContext удаляется, удаляются все экземпляры DBContext, я создал простое приложение с вкладками в XF с Prism, которое реплицирует мою проблему, когда я использую свой DBContext на веб-сервере, я создаю области однако с призмой я не могу этого сделать, потому что, если я попытаюсь внедрить IContainerRegistry и IContainerProvider в свой класс обслуживания, мое приложение просто не сработает.

Я искал везде и не могу найти способ создать область действия на странице службы.

В моем интерфейсе IGenerateDbContext есть только один метод

public IApplicationDbContext GenerateNewContext()
        {
            IApplicationDbContext dbContext = new ApplicationDbContext(_sqlite);
            return dbContext;
        }

Мое хранилище данных, доступ к DbContext через IGenerateDbContext

using (IApplicationDbContext myDbContext = _generateDbContext.GenerateNewContext())
                {
                    ....
                    removed for simplicity
                }

Полное приложение доступно здесь https://github.com/silvajnr/PrismTabbedDbContext

Я читал, что призма создает DBContext для ViewModel, должна просто синхронизировать DBConetx с блокировками Mutex

Ошибка: System.ObjectDisposedException: невозможно получить доступ к удаленному объекту. Распространенной причиной этой ошибки является удаление контекста, который был разрешен в результате внедрения зависимостей, а затем попытка использовать тот же экземпляр контекста в другом месте вашего приложения. Это может произойти, если вы вызываете Dispose () в контексте или заключаете контекст в оператор using. Если вы используете внедрение зависимостей, вы должны позволить контейнеру внедрения зависимостей позаботиться об удалении экземпляров контекста. Имя объекта: ApplicationDbContext.


person silvajnr    schedule 18.04.2019    source источник


Ответы (1)


Спасибо за сообщение в блоге: Xamarin: начало работы с Prism 7 https://codesandchips.blog/2018/05/31/xamarin-getting-started-with-prism-7/

Показал мне, как вручную разрешить сервисы.

var _appContainer = (App.Current as PrismApplication).Container.GetContainer();

using (var scope = _appContainer.OpenScope())
                    {
                        IApplicationDbContext myDbContext = scope.Resolve<IGenerateDbContext>().GenerateNewContext();
...
}
person silvajnr    schedule 18.04.2019