xamarin.forms - 将 Lazy<> 与 Prism.DryIoc.Forms 一起使用会产生 "container is garbage collected"异常

标签 xamarin.forms prism dryioc

我们使用 Prism.DryIoc.Forms 通过 Xamarin.Forms 创建应用程序。为了最大限度地减少应用程序的启动时间,我们对具有大量依赖项的类使用 Lazy<> 模式。

这过去适用于 Prism.Unity.Forms。但是,我无法让它与 Prism.DryIoc.Forms 一起使用。任何帮助将不胜感激。

代码如下。我们有一个这样的页面 View 模型:

public class MySamplePageViewModel
{
    private readonly Lazy<ISomeClass> _lazySomeClass;

    public MySamplePageViewModel(Lazy<ISomeClass> lazySomeClass)
    {
        _lazySomeClass = lazySomeClass;
    }

    public void SomeMethod()
    {
        _lazySomeClass.Value.DoIt(); //throws exception
    }
}

但是,在实例化页面 View 模型之后,在调用 _lazySomeClass.Value 时,我们会收到一条异常消息“容器不再可用(已被垃圾收集)。”。 这似乎与 Prism 如何解析 View 模型有关,因为在调用以下内容时它工作正常:

var container = (Application.Current as PrismApplicationBase<IContainer>).Container;
var lazySomeClass = container.Resolve<Lazy<ISomeClass>>();
lazySomeClass.Value.DoIt(); //works fine

我们是这样进行注册的:

container.Register<ISomeClass, SomeClass>(Reuse.Singleton);
container.RegisterTypeForNavigation<MySamplePage, MySamplePageViewModel>("MySamplePage");

最佳答案

问题应在 v2.10.3 中修复.

因此,下一个合乎逻辑的步骤是要求 Prism.DryIoc.Forms 维护者更新到最新的 DryIoc 版本。

关于xamarin.forms - 将 Lazy<> 与 Prism.DryIoc.Forms 一起使用会产生 "container is garbage collected"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46195007/

相关文章:

c# - 从 Dapper 连接但从 EF 6 工作的神秘身份验证错误 - 相同的 ConnectionString

c# - IoC - 使用注入(inject)的对象参数解析 WPF 窗口

c# - Xamarin.Forms:按代码中的后退按钮

c# - Signalr 客户端 - Xamarin Forms - Connection Hub 不工作 C#

c# - 从 PRISM 中的区域获取 HostControl

wpf - 没有框架的复合 WPF 模块中的命令处理

dependency-injection - 如果您需要同一接口(interface)的不同实例,如何设置 DryIoc 容器?

c# - 在 Xamarin Forms 中获取缓存图像源的原始高度和宽度

c# - 如何将四元数转换为角度?

xamarin.forms - 来自 Android 后台服务的 Prism DI 容器