2011-07-04 11 views
3

私は、各リクエストをデータストアに戻す必要がないように、メモリ内のオブジェクトのインスタンスをキャッシュするバンク/コレクションを持っています。私はAutofacにこの銀行のインスタンスを提供したいが、x秒後にそれを期限切れにして、次のリクエストで新しいインスタンスが作成されるようにする。私はこれを達成するためにLifetimeScopeを設定することに頭を悩ませています。私はthisを数回読んだ。 Bankオブジェクトは実際には作業単位の対象ではありません。理想的には、すべての作業単位の上に存在し、オブジェクトをそれらの内部および外部にキャッシュします。時間とともに期限切れになるオートファックライフタイムスコープの作成

私は現在、以下のアプローチを使用していますが、期待したとおりに動作しません。

誰かが正しい方向に向けることができますか?

.... 
builder.Register(c => 
      { 
       return new ORMapBank(c.Resolve<IORMapRoot>()); 
      }).InstancePerMatchingLifetimeScope(ExpireTimeTag.Tag()); 


     IContainer container = builder.Build(); 
     var TimedCache= RootScope.BeginLifetimeScope(ExpireTimeTag.Tag()); 
     DependencyResolver.SetResolver(new AutofacDependencyResolver(TimedCache)); 

....

public static class ExpireTimeTag 
{ 
    static DateTime d = DateTime.Now; 
    static Object tag = new Object(); 

    public static object Tag() 
    { 
     if (d.AddSeconds(10) < DateTime.Now) 
     { 
      CreateTag(); 
     return tag; 
    } 

    private static void CreateTag() 
    { 
     tag = new Object(); 
    } 
} 

非常に事前に感謝します。

答えて

6

この種の動作を実現するには、キャッシュデコレータを使用するのが一般的です。あなたは以下のん(ただしORMapBank場合、それは同じように動作します)あなたのIORMapRootが問題のデータを取得するための責任があると仮定:IORMapRoot

  • を実装する新しいタイプ、CachingORMapRootを作成

    • は取るコンストラクタを追加します。有効期限TimeSpanと元のIORMapRoot実装のインスタンス。
    • 基本インスタンスを呼び出し、その後の呼び出しで結果をキャッシュするメンバーを実装します(実装はキャッシュ技術によって異なります)。
    • これは、このようなキャッシュを実装するための非常にクリーンな方法ですIORMapRoot

    などの容器にこのタイプを登録します。それはまた、switch between cached and non-cached implementationsに簡単になります。

  • +0

    ありがとうございました。治療をしました。私は道を切っていたようだ。 私はセッション状態にさよならを言うことができる位置にいます!これは重大なことです。私はキャンドルや瞬間をマークする何かを照らす必要があるように感じる:-) –

    +0

    Hooray!喜んで助けになる。次回は誰かが「DIは役に立たないし、複雑すぎる」と言っているので、今日の話やろうそくを教えてくれるでしょう:) *もちろんDIを使う必要はありませんが、十字を追加するのは簡単ですあなたがそれを必要とするときに、キャッシングのような懸念を切る* – bentayloruk

    +0

    あなたが知っているのは面白いです。我々は先日、ベストプラクティスに関するコンサルティングを行うWeb企業をここに配置しました。公正であるために、彼らはとても良かったです。リードテクがDIを必要とせず、複雑すぎると却下した時、私は驚いた。私は現在のプロジェクトでAutofacの実装をほぼ完了しており、コードの必要性が非常に驚いています。すべて私は10〜15行しか必要ないと思う。非常に印象的なもの:-) –

    関連する問題