将 Lazy<> 与 Prism.DryIoc.Forms 一起使用会产生 "container is garbage collected" 异常
Using Lazy<> with Prism.DryIoc.Forms gives "container is garbage collected" exception
我们正在使用 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");
问题应在 v2.10.3 中解决。
因此,下一个合乎逻辑的步骤是要求 Prism.DryIoc.Forms 维护人员更新到最新的 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 时我们会收到异常消息“容器不再可用(已被垃圾收集)。”。 这似乎与 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");
问题应在 v2.10.3 中解决。
因此,下一个合乎逻辑的步骤是要求 Prism.DryIoc.Forms 维护人员更新到最新的 DryIoc 版本。