使用Lazy<>用Prism.DryIoc.Forms给出“容器是垃圾收集”的例外

时间:2017-09-13 10:23:38

标签: xamarin.forms prism dryioc

我们正在使用Prism.DryIoc.Forms来创建带有Xamarin.Forms的应用程序。为了最大限度地缩短应用的启动时间,我们使用了Lazy<>具有大量依赖关系的类的模式。

这曾经与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
    }
}

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

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");

1 个答案:

答案 0 :(得分:2)

问题应该在v2.10.3修复。

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