2011-01-13 38 views
0

我喜歡HTTPContext.Current的工作方式。有什麼辦法可以實現一個與HTTPContextBase沒有關係的類似對象嗎?基本上,我想創建一個UserContext。然後在DAL中,我可以簡單地查詢此UserContext以獲取用戶特定的信息。該對象必須是線程安全的並且可以在ASP.NET環境(THREAD STATIC屬性不起作用)和控制檯/庫環境中工作。像對象一樣的HttpContext

+1

爲什麼`[ThreadStatic]`不能工作? – SLaks 2011-01-13 00:35:14

+0

ThreadStatic將不起作用,因爲如果它位於ASP.NET環境中,則可能發生線程切換。 – choudeshell 2011-01-13 01:24:59

回答

2

HttpContext.Current是一個單例。線程安全實現是這樣的:

using System; 

public sealed class Singleton 
{ 
    private static volatile Singleton instance; 
    private static object syncRoot = new Object(); 

    private Singleton() {} 

    public static Singleton Current 
    { 
     get 
     { 
     if (instance == null) 
     { 
      lock (syncRoot) 
      { 
       if (instance == null) 
        instance = new Singleton(); 
      } 
     } 

     return instance; 
     } 
    } 
} 

但是使用Singleton模式不是好主意。這幾乎是「反模式」。這阻礙了單元測試。而不是更好地使用依賴注入容器。 http://en.wikipedia.org/wiki/Dependency_injection

相關問題