Right! Thank you! On Dec 1, 5:31 pm, Jason Meckley <[email protected]> wrote: > Tom, if all you want is to avoid the Kernel's model processing against > ISession. the logic could be simplified. > public class LifecycleModelInspectorThatIgnoresISession : > LifecycleModelInspector > { > public override void ProcessModel(IKernel kernel, > ComponentModel model) > { > if (typeof (ISession) == model.Implementation) return; > base.ProcessModel(kernel, model); > } > } > > On Nov 26, 5:41 am, Tom Allard <[email protected]> wrote: > > > > > There is some other related issue i encountered and i thought I'd > > share. > > > When you use transient components in combination with castle and one > > your transient component has a dependency on a component that is > > IDisposable, you should make sure to call IKernel.ReleaseComponent(). > > If you don't, you will be leaking memory in the form of > > Castle.MicroKernel.Burden objects (the componet burden tracking > > subsystem ). > > > Now ISession does extend IDisposable, hence this leak actually happens > > when you are using this factory method. > > > Now you don't want MicroKernel to be calling Dispose on your ISession > > either, since you are managing the ISession using Rhino.Commons, and > > its the responsibility of NHibernateUnitOfWorkFactory to Disponse the > > session. > > > I eventually solved the problem by plugging in my own > > ComponentModelBuilder into MicroKernel, which in turn uses a custom > > LifecycleModelInspector (LifecycleModelInspectorThatIgnoresISession) > > that does not add a Decommission LifecycleStepType for ISession. (And > > hence disables the burden tracking for ISession) > > > public class LifecycleModelInspectorThatIgnoresISession : > > LifecycleModelInspector > > { > > > public override void ProcessModel(IKernel kernel, > > Castle.Core.ComponentModel model) > > { > > if (model == null) > > { > > throw new ArgumentNullException("model"); > > } > > if (typeof(IInitializable).IsAssignableFrom > > (model.Implementation)) > > { > > model.LifecycleSteps.Add > > (LifecycleStepType.Commission, InitializationConcern.Instance); > > } > > if (typeof(ISupportInitialize).IsAssignableFrom > > (model.Implementation)) > > { > > model.LifecycleSteps.Add > > (LifecycleStepType.Commission, SupportInitializeConcern.Instance); > > } > > if (typeof(IDisposable).IsAssignableFrom > > (model.Implementation) > > && !typeof(ISession).IsAssignableFrom > > (model.Implementation)) //Session specific > > { > > model.LifecycleSteps.Add > > (LifecycleStepType.Decommission, DisposalConcern.Instance); > > } > > > } > > } > > } > > > There may be more elegant ways though... > > > -Tom > > On Nov 25, 3:08 pm, Jason Meckley <[email protected]> wrote: > > > > chris, you can also configure NH to use CurrentSessionContext and > > > resolve the session using a factory method > > > .AddFacilty<FactorySupportFacility>() > > > .Register(Component > > > .For<ISession>()) > > > .UsingFactoryMethod(k=>k.Resolve<ISessionFactory> > > > ().GetCurrentSession()) > > > .LifeStyle.Is(LifeStyleType.Transient)); > > > > here is a link for configuring Current Session > > > Context.http://nhforge.org/wikis/howtonh/currentsessioncontext-for-desktop-de... > > > > note; if you have multiple session factories in your project, you > > > cannot use the FactoryMethod approach. > > > You need to implement SubDependencyResolver instead. > > > > On Nov 25, 6:18 am, Ayende Rahien <[email protected]> wrote: > > > > > Go to that property and add the attribute [DoNoWire] to it. > > > > > On Wed, Nov 25, 2009 at 1:04 PM, ChrisR <[email protected]> > > > > wrote: > > > > > With the recent changes to Rhino.Security it now requires ISession to > > > > > be provided by the container, so how should I register ISession when > > > > > I'm using Rhino.Commons? > > > > > > On 25 Nov, 10:59, Ayende Rahien <[email protected]> wrote: > > > > > > IOW, > > > > > > The problem is that > > > > > > NHibernateUnitOfWorkFactory.CurrentSession is settable. > > > > > > > On Wed, Nov 25, 2009 at 12:59 PM, Ayende Rahien <[email protected]> > > > > > wrote: > > > > > > > Hm, I don't think this is related to Rhino Security. > > > > > > > What is happening is that during the resolution of IUoWFactory, > > > > > > > you are > > > > > > > trying to access UnitOfWork. > > > > > > > That is likely going to cause issues. > > > > > > > > On Wed, Nov 25, 2009 at 12:50 PM, ChrisR > > > > > > > <[email protected] > > > > > >wrote: > > > > > > > >> The factory facility is registered. Here is the complete > > > > > > >> container > > > > > > >> initialisation code: > > > > > > > >> container.AddFacility<StartableFacility>(); > > > > > > >> container.AddFacility<FactorySupportFacility>(); > > > > > > >> container.AddFacility("logging.facility", new > > > > > > >> LoggingFacility > > > > > > >> (LoggerImplementation.Log4net, "log4net.config")); > > > > > > > >> container.Register( > > > > > > >> Component.For<INHibernateInitializationAware>() > > > > > > >> > > > > > > >> .ImplementedBy<NHibernateMsSql2005ExpressInitialization>() > > > > > > >> .LifeStyle.Singleton); > > > > > > >> container.Register( > > > > > > >> Component.For(typeof (IRepository<>)) > > > > > > >> .ImplementedBy(typeof (NHRepository<>)) > > > > > > >> .LifeStyle.Transient); > > > > > > >> container.Register( > > > > > > >> Component.For<IUnitOfWorkFactory>() > > > > > > >> .ImplementedBy<NHibernateUnitOfWorkFactory>() > > > > > > >> .LifeStyle.Singleton); > > > > > > > >> container.Register( > > > > > > >> Component.For<IAuthorizationService>() > > > > > > >> .ImplementedBy<AuthorizationService>() > > > > > > >> .LifeStyle.Transient); > > > > > > >> container.Register( > > > > > > >> Component.For<IAuthorizationRepository>() > > > > > > >> .ImplementedBy<AuthorizationRepository>() > > > > > > >> .LifeStyle.Transient); > > > > > > >> container.Register( > > > > > > >> Component.For<IPermissionsBuilderService>() > > > > > > >> .ImplementedBy<PermissionsBuilderService>() > > > > > > >> .LifeStyle.Transient); > > > > > > >> container.Register( > > > > > > >> Component.For<IPermissionsService>() > > > > > > >> .ImplementedBy<PermissionsService>() > > > > > > >> .LifeStyle.Transient); > > > > > > > >> container.Register( > > > > > > >> Component.For<ISession>() > > > > > > >> .UsingFactoryMethod(() => UnitOfWork.CurrentSession) > > > > > > >> .LifeStyle.Transient); > > > > > > > >> On 25 Nov, 08:40, Ayende Rahien <[email protected]> wrote: > > > > > > >> > I think that you need to register the factory facility > > > > > > > >> > On Tue, Nov 24, 2009 at 8:20 PM, ChrisR < > > > > > [email protected]> > > > > > > >> wrote: > > > > > > >> > > When using the latest version of rhino.commons, how can the > > > > > ISession > > > > > > >> > > interface be provided for use with rhino.security? > > > > > > > >> > > If I attempt to register ISession using a factory method as > > > > > > >> > > below: > > > > > > > >> > > container.Register( > > > > > > >> > > Component.For<ISession>() > > > > > > >> > > .UsingFactoryMethod(() => UnitOfWork.CurrentSession) > > > > > > >> > > .LifeStyle.Transient); > > > > > > > >> > > then I get a CircularDependencyException: > > > > > > > >> > > Castle.MicroKernel.Exceptions.CircularDependencyException: A > > > > > > >> > > cycle > > > > > was > > > > > > >> > > detected when trying to resolve a dependency. The dependency > > > > > > >> > > graph > > > > > > >> > > that resulted in a cycle is: > > > > > > >> > > - Service dependency 'CurrentSession' type > > > > > > >> > > 'NHibernate.ISession' > > > > > for > > > > > > >> > > NHibernate.ISession CurrentSession in type > > > > > > >> > > Rhino.Commons.NHibernateUnitOfWorkFactory > > > > > > >> > > + Service dependency 'CurrentSession' type > > > > > > >> > > 'NHibernate.ISession' > > > > > for > > > > > > >> > > NHibernate.ISession CurrentSession in > > > > > > >> > > Rhino.Commons.NHibernateUnitOfWorkFactory > > > > > > > >> > > -- > > > > > > > >> > > 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]<rhino-tools-dev%2bunsubscr...@googlegroups.com> > > > > > <rhino-tools-dev%[email protected]<rhino-tools-dev%252bunsubsc[email protected]> > > > > > > > >> <rhino-tools-dev%[email protected]<rhino-tools-dev%252bunsubsc[email protected]> > > > > > <rhino-tools-dev%[email protected]<rhino-tools-dev%25252buns[email protected]> > > > > > > > >> > > . > > > > > > >> > > For more options, visit this group at > > > > > > >> > >http://groups.google.com/group/rhino-tools-dev?hl=en. > > > > > > > >> -- > > > > > > > >> 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 > > ... > > read more »- Hide quoted text - > > - Show quoted text -
-- 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.
