Thanks Jason, I see it now, and it's an interesting approach, I never used
it though. At the moment I am just doing UoW.Current when I need access to
the UoW, but having a decorator which gives me the current one and still
have it in the constructor is a nice way to accomplish that.

On Mon, Sep 21, 2009 at 22:37, Jason Meckley <[email protected]> wrote:

>
> this is what I like about the SessionAdapter object I posted above.
> you can use the default lifestyle of singleton. the actual session is
> not retrieved (from the current session context) until you call a
> member of session.
>
> On Sep 21, 3:20 pm, Simone Busoli <[email protected]> wrote:
> > I'm not sure I follow you, if I have a component which takes an
> > ISession as a ctor argument, I need to be careful to configure its
> > lifestyle to be "more transient" than that of the session itself,
> > right? Or I'll get an instance of the component with an out of date
> > session.
> >
> > 2009/9/21, Ayende Rahien <[email protected]>:
> >
> >
> >
> > > Simone,
> > > *shrug*, the provide an ISession implementation that will access the
> ambient
> > > session.
> >
> > > On Mon, Sep 21, 2009 at 9:49 PM, Simone Busoli
> > > <[email protected]>wrote:
> >
> > >> That's what I don't like much with this approach, it's easy to do
> > >> something wrong, because you need to be very careful about the
> > >> lifestyle of your components, or you'll get into weird situations.
> > >> Ideally, I wouldn't like my components to be sort of aware of the
> > >> lifestyle of something they depend on, or, put in other words, I'd
> > >> expect them to get the right UoW regardless of whether they are
> > >> transient or singleton.
> >
> > >> 2009/9/21, Ayende Rahien <[email protected]>:
> > >> > yes
> >
> > >> > On Mon, Sep 21, 2009 at 7:20 PM, Martin Nilsson <
> [email protected]>
> > >> wrote:
> >
> > >> >> Yes, that was the case. Thanks.
> > >> >> My other question regarding taking ISession as a ctor argument.
> Then
> > >> >> all
> > >> >> those classes (queryobject, service and repository) needs to be
> > >> transient?
> >
> > >> >> On Sun, Sep 20, 2009 at 12:45 PM, Ayende Rahien <[email protected]
> >
> > >> wrote:
> >
> > >> >>> You need to register the factory facility.
> >
> > >> >>> On Sun, Sep 20, 2009 at 10:15 AM, Martin Nilsson
> > >> >>> <[email protected]>wrote:
> >
> > >> >>>> Ok ok :)
> >
> > >> >>>> I changed to this instead:
> >
> > >>
> Kernel.Register(Component.For<ISession>().LifeStyle.Transient.UsingFactoryMethod(()
> > >> >>>> => Kernel.Resolve<ISessionFactory>().GetCurrentSession()));
> >
> > >> >>>> but then I get error:
> > >> >>>> "Type NHibernate.ISession is abstract.
> > >> >>>> As such, it is not possible to instansiate it as implementation
> of
> > >> >>>> NHibernate.ISession service"
> >
> > >> >>>> My solution now is this (not causing the above error):
> >
> > >> >>>> ServiceClass:
> > >> >>>>   ctor(IUnitOfWorkFactory unitOfWorkFactory)
> >
> > >> >>>>   In ServiceMethod:
> > >> >>>>     var session = unitOfWorkFactory.CurrentSession;
> >
> > >> >>>> Questions:
> > >> >>>> 1. Anyone knows why I get the above error?
> > >> >>>> 2. Is my other solution (using IUnitOfWorkFactory) better/ok
> then?
> > >> >>>> 3. You say that it's possible (better?) to take the ISession as a
> > >> >>>> ctor
> > >> >>>> arg. Will that be a different one for each req if my service
> class is
> > >> >>>> singleton, although my session registration is transient?
> >
> > >> >>>> On Fri, Sep 18, 2009 at 9:50 PM, Ayende Rahien <
> [email protected]
> > >> >wrote:
> >
> > >> >>>>> This is HORRIBLE.
> > >> >>>>> You micro manage the session and remove from NH things like UoW,
> > >> >>>>> auto
> > >> >>>>> change tracking, persistence by reachability, etc.
> > >> >>>>> Sessions should be managed by request / context, not in methods.
> >
> > >> >>>>> On Fri, Sep 18, 2009 at 4:25 PM, Martin Nilsson
> > >> >>>>> <[email protected]>wrote:
> >
> > >> >>>>>> ProductService:
> > >> >>>>>> public void Save(Product product) {
> > >> >>>>>>   using(var session = ?.GetSession)
> > >> >>>>>>   using(var tx = session.BeginTransaction())
> > >> >>>>>>   {
> > >> >>>>>>     repository.Add(product);
> > >> >>>>>>     tx.Commit();
> > >> >>>>>>   }
> > >> >>>>>> }
> >
> > >> --
> > >> Inviato dal mio dispositivo mobile
> >
> > --
> > Inviato dal mio dispositivo mobile
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Rhino Tools Dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rhino-tools-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to