2017-09-13 12 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(而不是更高版本) –