Prism Library Dryioc CreateScope - 无法访问已处置的对象

问题描述 投票:0回答:1

我有一个带有棱镜Dryioc 7.1的Xamarin Forms应用程序,我遇到了以下问题:在上一个操作完成之前,在此上下文中启动了第二个操作。

所以我按照这篇文章#https://www.pmichaels.net/tag/a-second-operation-started-on-this-context-before-a-previous-operation-completed/

这解决了我的问题,直到我在XF应用程序上添加选项卡页面,因为所有选项卡页面同时初始化,我有并发服务类访问我的DBContext,我假设它们是不同的实例,至少在它们是创建他们有一个不同的GUID,但似乎每次我的DBContext被处置,处置所有DBContext实例,我在XF创建一个简单的标签页应用程序与Prism复制我的问题,当我在Web服务器上使用我的DBContext我创建范围但是有了棱镜,我似乎无法做到,因为如果我尝试在我的服务类上注入IContainerRegistry和IContainerProvider,那么我的应用程序就不起作用了。

我到处寻找,我找不到在服务页面上创建范围的方法

我的生成DbContext接口只有一个方法

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

我的数据存储通过IGenerateDbContext访问DbContext

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

这里有完整的应用程序https://github.com/silvajnr/PrismTabbedDbContext

我读到棱镜为每个ViewModel创建一个DBContext,应该只是将DBConetx与Mutex锁同步

错误:System.ObjectDisposedException:无法访问已处置的对象。此错误的常见原因是处理从依赖项注入解析的上下文,然后尝试在应用程序的其他位置使用相同的上下文实例。如果您在上下文中调用Dispose()或将上下文包装在using语句中,则可能会发生这种情况。如果使用依赖项注入,则应该让依赖项注入容器负责处理上下文实例。对象名:'ApplicationDbContext'。

scope prism dbcontext idisposable dryioc
1个回答
0
投票

感谢博客文章: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();
...
}
© www.soinside.com 2019 - 2024. All rights reserved.