2017-09-13 5 views
2

Xamarin.Formsでアプリを作成するためにPrism.DryIoc.Formsを使用しています。アプリの起動時間を最小限に抑えるために、たくさんの依存関係を持つクラスに対してLazy <パターンを使用しています。Lazy <>をPrism.DryIoc.Formsとともに使用すると、「コンテナはガベージコレクトされています」例外が発生する

これは、Prism.Unity.Formsで正常に動作するために使用されました。しかし、私はそれをPrism.DryIoc.Formsで動作させることはできません。どんな助けもありがとう。

コードは次のとおりです。私たちは、このようなページビューモデルを持っている:ページビューモデルがインスタンス化された後_lazySomeClass.Valueを呼び出すとき

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

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

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

しかし、我々はコンテナが使用できなくなった」というメッセージと例外を取得(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、Version = 2.12.1.0、Culture = neutral、PublicKeyToken = null'またはその依存関係のいずれかを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。 ' コンテナにアクセスしているとき。 –

答えて

2

問題があるべき 次の呼び出し時に、それが正常に動作しますので、プリズムは、ビューモデルを解決する方法に関連しているようですv2.10.3に固定されています。

したがって、次の論理的なステップは、Prism.DryIoc.Formsの保守担当者に最新のDryIocバージョンに更新するよう依頼することです。

+0

プリズム7はすでに新しいバージョンをターゲットにしています。最新の6.3リリースを使用している場合は、アプリケーションでDryIocを更新するだけで済みます。 –

+0

私はDryIocバージョン2.10.7を使用しているPrism.DryIoc.Formsバージョン7.0.0.51-ciをテストしました。 @ダンス。プリズムを更新せずに単にDryIocを更新しても機能しませんでした。 Prism.DryIoc.Forms 6.3.0.1はDryIoc 2.10.1でのみ動作します(それより高いバージョンではありません) –

関連する問題