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 -~----------~----~----~----~------~----~------~--~---
