Xamarin.forms 使用Lazy<&燃气轮机;使用Prism.DryIoc.Forms给出;“垃圾收集容器”;例外

Xamarin.forms 使用Lazy<&燃气轮机;使用Prism.DryIoc.Forms给出;“垃圾收集容器”;例外,xamarin.forms,prism,dryioc,Xamarin.forms,Prism,Dryioc,我们正在使用Prism.DryIoc.Forms创建带有Xamarin.Forms的应用程序。为了尽可能缩短应用程序的启动时间,我们对具有大量依赖项的类使用惰性模式 这在Prism.Unity.Forms中使用效果很好。但是,我无法让它与Prism.DryIoc.Forms一起工作。任何帮助都将不胜感激 代码如下。我们的页面视图模型如下所示: public class MySamplePageViewModel { private readonly Lazy<ISomeClass&

我们正在使用Prism.DryIoc.Forms创建带有Xamarin.Forms的应用程序。为了尽可能缩短应用程序的启动时间,我们对具有大量依赖项的类使用惰性模式

这在Prism.Unity.Forms中使用效果很好。但是,我无法让它与Prism.DryIoc.Forms一起工作。任何帮助都将不胜感激

代码如下。我们的页面视图模型如下所示:

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

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

    public void SomeMethod()
    {
        _lazySomeClass.Value.DoIt(); //throws exception
    }
}
container.Register<ISomeClass, SomeClass>(Reuse.Singleton);
container.RegisterTypeForNavigation<MySamplePage, MySamplePageViewModel>("MySamplePage");
公共类MySamplePageViewModel
{
私有只读懒惰类;
public MySamplePageViewModel(Lazy lazySomeClass)
{
_懒散类=懒散类;
}
公共方法()
{
_lazySomeClass.Value.DoIt();//引发异常
}
}
然而,在实例化页面视图模型之后,当调用_lazySomeClass.Value时,我们得到一个异常消息“Container不再可用(已被垃圾收集)。”。 这似乎与Prism解析视图模型的方式有关,因为调用以下命令时,它可以正常工作:

var container = (Application.Current as PrismApplicationBase<IContainer>).Container;
var lazySomeClass = container.Resolve<Lazy<ISomeClass>>();
lazySomeClass.Value.DoIt(); //works fine
var container=(Application.Current作为PrismApplicationBase.container);
var lazySomeClass=container.Resolve();
lazySomeClass.Value.DoIt()//很好
我们是这样注册的:

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

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

    public void SomeMethod()
    {
        _lazySomeClass.Value.DoIt(); //throws exception
    }
}
container.Register<ISomeClass, SomeClass>(Reuse.Singleton);
container.RegisterTypeForNavigation<MySamplePage, MySamplePageViewModel>("MySamplePage");
container.Register(重用.Singleton);
container.RegisterTypeForNavigation(“MySamplePage”);

问题应在中解决


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

DryIoc本身的版本是什么?我使用的是DryIoc 2.10.1,因为这是我唯一可以使用Prism.DryIoc.Forms 6.3.0.1的版本。对于更高版本的DryIoc,我get
无法加载文件或程序集'DryIoc,Version=2.12.1.0,Culture=neutral,PublicKeyToken=null'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。
当访问容器时。Prism 7已针对较新版本。如果您使用的是最新的6.3版本,那么您只需在应用程序中更新DryIoc即可。我测试了Prism.DryIoc.Forms 7.0.0.51-ci版本,该版本使用的是DryIoc 2.10.7版,效果非常好@丹。仅仅更新DryIoc而不更新prism是不起作用的。Prism.DryIoc.Forms 6.3.0.1似乎只适用于DryIoc 2.10.1(而不是更高版本)