私は、各リクエストをデータストアに戻す必要がないように、メモリ内のオブジェクトのインスタンスをキャッシュするバンク/コレクションを持っています。私は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();
}
}
非常に事前に感謝します。
ありがとうございました。治療をしました。私は道を切っていたようだ。 私はセッション状態にさよならを言うことができる位置にいます!これは重大なことです。私はキャンドルや瞬間をマークする何かを照らす必要があるように感じる:-) –
Hooray!喜んで助けになる。次回は誰かが「DIは役に立たないし、複雑すぎる」と言っているので、今日の話やろうそくを教えてくれるでしょう:) *もちろんDIを使う必要はありませんが、十字を追加するのは簡単ですあなたがそれを必要とするときに、キャッシングのような懸念を切る* – bentayloruk
あなたが知っているのは面白いです。我々は先日、ベストプラクティスに関するコンサルティングを行うWeb企業をここに配置しました。公正であるために、彼らはとても良かったです。リードテクがDIを必要とせず、複雑すぎると却下した時、私は驚いた。私は現在のプロジェクトでAutofacの実装をほぼ完了しており、コードの必要性が非常に驚いています。すべて私は10〜15行しか必要ないと思う。非常に印象的なもの:-) –