Shorter version to register an ISession in container and provide it using ISessionFactory:
container.Register( Component .For<ISession>() .LifeStyle.Transient .UsingFactoryMethod(() => container.Resolve<ISessionFactory>().GetCurrentSession()); Cheers :) On Fri, Sep 18, 2009 at 5:23 PM, Jason Meckley <[email protected]>wrote: > > I inject a session as a ctor dependency like this > > class Service > { > private readonly ISession session; > public Service(ISession session) > { > this.session = session; > } > > public void DoWork(int id) > { > var entity = session.Load<Entity>(id); > session.Delete(entity) > } > } > > class SessionResolver : ISubDependencyResolver > { > private readonly ISessionFactory factory; > public SessionResolver(ISessionFactory factory) > { > this.factory = factory; > } > > public object Resolve(...) > { > return new SessionAdapter(factory); > } > > public bool CanResolve(...) > { > return typeof(ISession).IsAssignableFrom > (dependency.TargetType); > } > } > > class SessionAdapter : ISession > { > private readonly ISessionFactory factory; > public SessionAdapter(ISessionFactory factory) > { > this.factory = factory; > } > > private ISession session { get { return factory.GetCurrentSession > (); } } > > private T Load<T>(object id) > { > return session.Load<T>(id); > } > > private Delete(object entity) > { > return session.Delete(entity); > } > > //the rest of the ISession members... > } > > On Sep 18, 9:25 am, Martin Nilsson <[email protected]> wrote: > > How does your repositories looks like? Because you can't take the > dependency > > to ISession as a ctor? I'm replacing Rhino Commons with plain session > > management but I'm not sure how to interact between my services and > > repositories. Can you give a brief example. Something like this > > > > ProductService: > > public void Save(Product product) { > > using(var session = ?.GetSession) > > using(var tx = session.BeginTransaction()) > > { > > repository.Add(product); > > tx.Commit(); > > } > > > > } > > > > ProductRepository: > > public void Add(Product product) { > > session.SaveOrUpdate(product); > > > > } > > > > Does your repository have a dependency to IKernel maybe? > > > > On Thu, Sep 10, 2009 at 8:35 PM, Ayende Rahien <[email protected]> > wrote: > > > I am talking about something like: > > > > > kernel.Register( Component.For<ISession>() > > > .FactoryMethod( () => HttpContext.Items["current-session"]) ) > > > ); > > > > > On Thu, Sep 10, 2009 at 9:33 PM, Tyler Burd <[email protected]> > wrote: > > > > >> When you say "ambient session from the container", do you mean > actually > > >> injecting the ISession? Do you accomplish this via child containers > when > > >> needing a session-per-web-request or something similar? Or do you use > a > > >> per-web-request life-cycle when you register ISession with the > container? > > > > >> On Thu, Sep 10, 2009 at 12:20 PM, Ayende Rahien <[email protected] > >wrote: > > > > >>> Yes, that is a good scenario for Binsor.But it is actually not > something > > >>> that I tend to do > > > > >>> On Thu, Sep 10, 2009 at 9:06 PM, Nathan Stott <[email protected]> > wrote: > > > > >>>> I disagree. Binsor, on several occasions, has saved me a lot of > > >>>> headache by allowing me to reconfigure my apps in production without > having > > >>>> to recompile them. Windsor Fl does not allow for this. > > > > >>>> On Thu, Sep 10, 2009 at 2:02 PM, Ayende Rahien <[email protected] > >wrote: > > > > >>>>> To be absolutely honest, with the Windsor FI, I am not sure there > is a > > >>>>> lot of place for Binsor. > > > > >>>>> On Thu, Sep 10, 2009 at 8:59 PM, rg <[email protected]> > wrote: > > > > >>>>>> Please save the Binsor! > > >>>>>> R > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
