假設業務層是一個單獨的DLL,我絕不會添加對System.Web
的引用,因此我絕不會直接使用Session
對象。這會導致業務層的不同設計以及客戶端的暴露接口(Web或WinForms)。
也就是說,作爲一個快速的解決方法,我會建議在業務層中編寫一個包裝類,它將代碼中的Session
對象隱藏起來。從代碼的調用將是這樣的:
((UserSession) DualContext.Current["UserSession"]).User.Info
和包裝實施將是這樣的(未完成和測試):
public class DualContext
{
private Dictionary<string, object> winFormsSession = new Dictionary<string, object>();
private static readonly DualContext instance = new DualContext();
public static DualContext Current
{
get { return instance; }
}
public object this[string key]
{
get
{
if (HttpContext.Current != null)
return HttpContext.Current.Session[key];
else
return winFormsSession[key];
}
set
{
if (HttpContext.Current != null)
HttpContext.Current.Session[key] = value;
else
winFormsSession[key] = value;
}
}
}
林不知道我很好地解釋了我的問題。用戶信息在他們登錄時填充,所以我不設想調用Web服務。在網絡上,我必須將用戶信息存儲在會話狀態中,但會話在Windows客戶端中不可用,我想在Web和客戶端中使用相同的BLL – flesh 2008-10-25 13:20:55