3

我们使用 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 时,我们得到一个异常消息“容器不再可用(已被垃圾收集)。 ”。它似乎与 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");
4

1 回答 1

3

该问题应在v2.10.3中修复。

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

于 2017-09-14T08:03:28.337 回答