Библиотека призмы Dryioc CreateScope - не удается получить доступ к удаленному объекту - PullRequest
0 голосов
/ 18 апреля 2019

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

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

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

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

Мой IGenerateDbContext Inteface имеет только один метод

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'.

1 Ответ

0 голосов
/ 18 апреля 2019

Спасибо за сообщение в блоге: 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();
...
}
...