For Webforms, you can create a base System.Web.UI.Page class that all your pages inherit from that expose your methods. Like so:
public partial class _Default : BasePage {
protected void Page_Load(object sender, EventArgs e) {
Person p = new Person {
FirstName = "MyFName",
LastName = "MyLName"
};
SetSessionData<Person>("somevalue", p);
var person = GetSessionData<Person>("somevalue");
}
}
public class BasePage : System.Web.UI.Page {
internal void SetSessionData<T>(string name, T value) {
this.Session[string.Format("{0}_{1}", value.GetType().GUID, name)] = value;
}
internal T GetSessionData<T>(string name) {
return (T)this.Session[string.Format("{0}_{1}", typeof(T).GUID, name)];
}
}
public class Person {
public Person() {
ID = Guid.NewGuid();
}
public Guid ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
For MVC: Another suggestion would be to create a "Base" Page class that all your controllers inherit from that expose your methods. Like so:
public class BaseController : Controller {
internal void SetSessionData<T>(string name, T value) {
this.Session[string.Format("{0}_{1}",value.GetType().GUID,name)] = value;
}
internal T GetSessionData<T>(string name) {
return (T)this.Session[string.Format("{0}_{1}", typeof(T).GUID, name)];
}
}
Then, you can get or set items as so:
Person p = new Person{
FirstName = "MyFName",
LastName = "MyLName"
};
SetSessionData<Person>("somevalue", p);
var person = GetSessionData<Person>("somevalue");