我在HttpApplicationState對象上有一個擴展方法,用於讓我的IoC容器脫離應用程序。如果該容器不存在,該代碼也會創建該容器。ASP.NET線程 - 雙重檢查鎖定
我有2個問題:
- 是我的代碼實際上是線程安全的,因爲我想讓它是
- 這被認爲是最好的做法來處理應用程序的狀態
守則如下:
private const string GlobalContainerKey = "UnityContainerKey";
public static IUnityContainer GetContainer(this HttpApplicationState application)
{
var container = application[GlobalContainerKey] as IUnityContainer;
if (container == null)
{
try
{
application.Lock();
container = application[GlobalContainerKey] as IUnityContainer;
if (container == null)
{
container = new UnityContainer();
application[GlobalContainerKey] = container;
}
}
finally
{
application.UnLock();
}
}
return container;
}
除此之外,由於我從Unity轉移到StructureMap和SM中,我將這個完整的問題作爲一個靜態類公開,因此我從不需要擔心它不存在。 – 2009-02-15 23:43:50