A way to refer to items in Session object without using Session directly

  • Thread starter Thread starter Andy B
  • Start date Start date
Yea,

Just keep it in both places.... Session and other container/place you will
use to get those things...
---------------------------------------------------------------------------
On a serious note..... What are you trying to do.
Will HttpContext.Current.Session help?
you can access Session object from your business logic without passing
Session around....If that is what you trying to avoid.

George.
 
Hi,

if you intend to keep your component loosely coupled, so that it does not
require ASP.NET's session to exist (if you intend to use it in other types
of apps or in a web service etc), you can design so that you have a type in
the component library which represents the data the usual component in that
library needs. E.g create a type to abstract the concept of a session for
your components.

You can instantiate that object (session type) in ASP.NET, store it in
ASP.NEt's Session if needed, but when using components from the library, you
pass it(them) the session object so the component wouldn't need to do grabs
to the ASP.NET Session.

Some background why just HttpContext.Current.Session is a bad thing:
http://aspadvice.com/blogs/joteke/archive/2006/04/23/16785.aspx
 
I am trying to avoid having to do something like this every time I want an
object from Session:
((DataSet)Session["ContractDataSet"]).Tables["..."]...;
or:
DataSet ContractDataSet = (DataSet)Session["ContractDataSet"];
//...whatever with CongtractDataSet

Session["ContractDataSet"]=ContractDataSet;

I want a way to create and refer to just ContractDataSEt but have it linked
to Session["ContractDataSet"] as well as ContractDataSet. I just need the
code in VB 9.
 
You could make a wrapper class and create a property. The get and set for
the property will then call the session object:

public class MyDataClass
{

public static DataSet ContractDataSet
{
get
{
return (DataSet)Session["ContractDataSet"];
}
set
{
Session["ContractDataSet"] = value;
}
}

}
You might want to do some null checks as well.

Regards,
Rick Davis
DBG Software


Andy B said:
I am trying to avoid having to do something like this every time I want an
object from Session:
((DataSet)Session["ContractDataSet"]).Tables["..."]...;
or:
DataSet ContractDataSet = (DataSet)Session["ContractDataSet"];
//...whatever with CongtractDataSet

Session["ContractDataSet"]=ContractDataSet;

I want a way to create and refer to just ContractDataSEt but have it linked
to Session["ContractDataSet"] as well as ContractDataSet. I just need the
code in VB 9.




George Ter-Saakov said:
Yea,

Just keep it in both places.... Session and other container/place you will
use to get those things...
---------------------------------------------------------------------------
On a serious note..... What are you trying to do.
Will HttpContext.Current.Session help?
you can access Session object from your business logic without passing
Session around....If that is what you trying to avoid.

George.
 
So this would be a static class that is maintained outside the bounds of the
page that uses it then? And I would probably put other methods/events in
this class that use the same session object?


dbgrick said:
You could make a wrapper class and create a property. The get and set for
the property will then call the session object:

public class MyDataClass
{

public static DataSet ContractDataSet
{
get
{
return (DataSet)Session["ContractDataSet"];
}
set
{
Session["ContractDataSet"] = value;
}
}

}
You might want to do some null checks as well.

Regards,
Rick Davis
DBG Software


Andy B said:
I am trying to avoid having to do something like this every time I want
an
object from Session:
((DataSet)Session["ContractDataSet"]).Tables["..."]...;
or:
DataSet ContractDataSet = (DataSet)Session["ContractDataSet"];
//...whatever with CongtractDataSet

Session["ContractDataSet"]=ContractDataSet;

I want a way to create and refer to just ContractDataSEt but have it
linked
to Session["ContractDataSet"] as well as ContractDataSet. I just need the
code in VB 9.




George Ter-Saakov said:
Yea,

Just keep it in both places.... Session and other container/place you
will
use to get those things...
---------------------------------------------------------------------------
On a serious note..... What are you trying to do.
Will HttpContext.Current.Session help?
you can access Session object from your business logic without passing
Session around....If that is what you trying to avoid.

George.

Is there a way to refer to things in Session object without calling
Session itself?
 
If all it was used for was to wrap around the Session, then it would be kind
of useless. Since the design and code of the wizard I am working on deals
with a lot of transactions between datasets and the frontend, I will need to
create other methods and properties to get the work done. Insdead of making
tons of senseless clutter inside the page, I can just make it inside a class
and then reference the class in the page code behind. Unless of course, that
isn't a good idea...
 
That will not prevent the Session object from actually being called, albeit
behind the scenes - all it will do is create a completely unnecessary
additional layer of code for no benefit whatsoever...

If you want to use the Session cache, then you need to refer to it - no
getting round that...
It ensures a) that there's no typos anywhere where the same object is
being accessed, and b) that there's agreement at all points of access
on what the data type is. (a) could be achieved by introducing a
constant, but (b) could only be achieved in that case by searching the
codebase. It's a lot nicer if you're changing a datatype to do it
inside this wrapper class and then have the compiler tell you of any
problems with that.

Damien
 
Back
Top