Xin lỗi tôi nếu câu hỏi này đã được yêu cầu. HttpContext.Current.Session["key"]
trả về một đối tượng và chúng tôi sẽ phải đưa nó đến Type
cụ thể trước khi chúng tôi có thể sử dụng nó. Tôi đã nhìn vào hiện thực khác nhau của phiên gõphiên đánh máy mạnh mẽ trong asp.net
http://www.codeproject.com/KB/aspnet/typedsessionstate.aspx http://weblogs.asp.net/cstewart/archive/2008/01/09/strongly-typed-session-in-asp-net.aspx http://geekswithblogs.net/dlussier/archive/2007/12/24/117961.aspx
và tôi cảm thấy rằng chúng tôi cần thêm một số mã hơn (chính xác cho tôi nếu tôi là sai) để SessionManager nếu chúng ta muốn thêm một new Type
của đối tượng vào phiên, hoặc là một phương thức hoặc như một trình bao bọc riêng biệt. Tôi nghĩ chúng ta có thể sử dụng Generics
public static class SessionManager<T> where T:class
{
public void SetSession(string key,object objToStore)
{
HttpContext.Current.Session[key] = objToStore;
}
public T GetSession(string key)
{
return HttpContext.Current.Session[key] as T;
}
}
Có lợi thế vốn có trong sử dụng
SessionManager<ClassType>.GetSession("sessionString")
vì sử dụng
HttpContext.Current.Session["sessionString"] as ClassType
- Tôi cũng đã suy nghĩ nó sẽ được tốt đẹp có cái gì đó như
SessionManager["sessionString"] = objToStoreInSession
, nhưng phát hiện ra rằng một lớp tĩnh không thể có một indexer. Có cách nào khác để đạt được điều này không?
suy nghĩ của tôi là tạo ra một SessionObject mà sẽ lưu trữ các
Type
và đối tượng, sau đó thêm đối tượng này đến phiên (sử dụng một SessionManager), với chìa khóa. Khi truy xuất, truyền tất cả các đối tượng đếnSessionObject
, nhận loại (nói t) và đối tượng (nói obj) và truyềnobj
làmt
và trả lại.public class SessionObject { public Type type {get;set;} public Object obj{get;set;}
}
này sẽ không hoạt động tốt (như chữ ký trở lại sẽ là như nhau, nhưng các loại trở lại sẽ khác nhau).
Có cách nào tao nhã khác của tiết kiệm/lấy đối tượng trong phiên một cách an toàn loại nhiều cách
mặc dù một bài tốt, phát sinh lớp học của bạn từ một buổi học cụ thể sẽ không cho phép bạn lấy được lớp học của bạn từ bất kỳ lớp trừu tượng khác/base class – ram
@Ram yes, điểm của lớp trong bài viết của tôi là nó là một trình bao bọc cho bất kỳ mục nào bạn muốn lưu trữ trong phiên làm việc. Và như tôi hy vọng bạn nhận thấy, nó thực sự không thể dễ dàng hơn. – TheObjectGuy
Nó sẽ thực sự làm việc cho ra khỏi nhà nước proc? Vì đối tượng phiên không bao giờ được viết trở lại kho lưu trữ phiên, do đó, kho lưu trữ phiên sẽ vẫn có các giá trị đã được tuần tự hóa trước đây trong đó. –