2017-09-13 15 views
2

我们使用Prism.DryIoc.Forms来创建Xamarin.Forms应用程序。为了最大限度地减少应用程序的启动时间,我们使用Lazy <>模式来处理有很多依赖关系的类。使用Lazy <>与Prism.DryIoc.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 
    } 
} 

但是,页面视图模型被实例化后,调用_lazySomeClass.Value当我们用消息“集装箱不再可用异常(已garbage-收集)“。 这似乎是与棱镜如何解决视图模型,打电话时因为以下正常工作:

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

DryIoc本身的版本是什么? – dadhi

+0

我使用的是DryIoc 2.10.1,因为这是我可以与Prism.DryIoc.Forms 6.3.0.1一起使用的唯一一个。 使用更高版本的DryIoc我得到 '无法加载文件或程序集'DryIoc,版本= 2.12.1.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。当访问容器时,可以使用“ ” 。 –

回答

2

的问题应该是固定在v2.10.3

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

+0

棱镜7已经瞄准了一个更新的版本。如果您使用最新的6.3版本,那么您只需在应用程序中更新DryIoc。 –

+0

我测试了Prism.DryIoc.Forms版本7.0.0.51-ci,它使用DryIoc版本2.10.7,它的工作方式就像一个魅力。 @DanS。只更新DryIoc而不更新棱镜不起作用。看来Prism.DryIoc.Forms 6.3.0.1只适用于DryIoc 2.10.1(而不是更高版本) –