2017-09-13 6 views
2

Wir verwenden Prism.DryIoc.Forms, um Anwendungen mit Xamarin.Forms zu erstellen. Um die Startzeit der App zu minimieren, verwenden wir das Muster Lazy <> für Klassen mit vielen Abhängigkeiten.Verwendung von Lazy <> mit Prism.DryIoc.Forms gibt "container is garbage collected" Ausnahme

Dies funktionierte gut mit Prism.Unity.Forms. Allerdings kann ich es nicht mit Prism.DryIoc.Forms arbeiten. Jede Hilfe wäre willkommen.

Der Code ist wie folgt. Wir haben eine Seite View-Modell wie folgt aus:

public class MySamplePageViewModel 
{ 
    private readonly Lazy<ISomeClass> _lazySomeClass; 

    public MySamplePageViewModel(Lazy<ISomeClass> lazySomeClass) 
    { 
     _lazySomeClass = lazySomeClass; 
    } 

    public void SomeMethod() 
    { 
     _lazySomeClass.Value.DoIt(); //throws exception 
    } 
} 

Nachdem jedoch die Seitenansicht Modell instanziiert wird, wenn _lazySomeClass.Value fordern wir eine Ausnahme mit der Meldung "erhalten Container ist nicht mehr verfügbar (wurde garbage- gesammelt). ". Es scheint verwandt zu sein, wie Prism löst das Ansichtsmodell, denn wenn der Aufruf folgenden es funktioniert:

var container = (Application.Current as PrismApplicationBase<IContainer>).Container; 
var lazySomeClass = container.Resolve<Lazy<ISomeClass>>(); 
lazySomeClass.Value.DoIt(); //works fine 

wir die Registrierung wie dies tun:

container.Register<ISomeClass, SomeClass>(Reuse.Singleton); 
container.RegisterTypeForNavigation<MySamplePage, MySamplePageViewModel>("MySamplePage"); 
+0

Was ist die Version von DryIoc selbst? – dadhi

+0

Ich benutze DryIoc 2.10.1, weil das die einzige ist, die ich mit Prism.DryIoc.Forms 6.3.0.1 arbeiten konnte. Mit höheren Versionen von DryIoc bekomme ich 'Konnte Datei oder Baugruppe nicht 'DryIoc, Version = 2.12.1.0, Kultur = neutral, PublicKeyToken = null' oder eine seiner Abhängigkeiten laden. Die Manifestdefinition der gefundenen Assembly stimmt nicht mit der Assemblyreferenz überein. " wenn auf den Container zugegriffen wird. –

Antwort

2

Das Problem sein sollte behoben in v2.10.3.

Daher ist der nächste logische Schritt, Prism.DryIoc.Forms-Betreuer zu bitten, auf die neueste DryIoc-Version zu aktualisieren.

+0

Prism 7 zielt bereits auf eine neuere Version ab. Wenn Sie die neueste Version 6.3 verwenden, müssen Sie lediglich DryIoc in Ihrer Anwendung aktualisieren. –

+0

Ich testete Prism.DryIoc.Forms Version 7.0.0.51-Ci, die DryIoc Version 2.10.7 verwendet und es funktionierte wie ein Charme. @DanS. einfach Update DryIoc ohne Aktualisierung Prisma hat nicht funktioniert. Es scheint, dass Prism.DryIoc.Forms 6.3.0.1 nur mit DryIoc 2.10.1 funktioniert (und keine höhere Version) –

Verwandte Themen