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