3
我有一個銀行/集合,它可以緩存內存中對象的實例,以便每個請求都不需要返回到數據存儲區。我希望Autofac提供這個銀行的一個實例,然後在x秒後過期,以便在下一個請求中創建一個新實例。爲了實現這個目標,我無法讓自己的頭腦設置LifetimeScope。我幾次讀過this。世行的目標並不是真正服從於一個工作單位。它理想地位於所有工作單元的「上方」,緩存對象內部和對象之間的對象。創建一個隨時間過期的Autofac Lifetimecope
我目前正在使用下面的方法,但它沒有按照我的希望工作。
有人可以請指出我在正確的方向嗎?
....
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
你知道這很有趣。前幾天我們有一家網絡公司在諮詢最佳實踐。公平地說,他們非常好。我很驚訝,儘管領先的技術部門將DI視爲不需要和太複雜。我在當前的項目中幾乎完成了Autofac的實現,並且我必須說我真的很驚訝它只需要很少的代碼。總之,我認爲我只需要10-15行。令人印象深刻的東西:-) –