我們使用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'或其依賴項之一。找到的程序集的清單定義與程序集引用不匹配。當訪問容器時,可以使用「 」 。 –