No that's my fault. The ARFacility part of this issue was never completed... (but I appreciate patches ;-))
-Markus 2009/7/29 jsmorris <[email protected]> > > Markus...thanks for the clarification. It appears that I need to read > more on nhibernate events. > > On to my next question, in the spec, it mentions "All components added > to the container that specify an NHibernate event listener interface > as service will be added for that specific event.", so I added this > during the initialization of my container > > AddComponent("global.eventlistener", typeof(IPostUpdateEventListener), > typeof(IoCEventListener)); > > and my IoCEventListener is > > public class IoCEventListener : IPostUpdateEventListener > { > public void OnPostUpdate(PostUpdateEvent @event) > { > var project = @event.Entity as Project; > > new ProjectComment { Note = "IoCEventListener", Project = > project, Owner = project.Owner.Name }.Save(); > } > > > But, OnPostUpdate is never called. Again, is there something I am not > understanding or doing incorrectly? > > Thanks, > Jason > > On Wed, Jul 29, 2009 at 1:54 PM, Markus Zywitza<[email protected]> > wrote: > > Sorry, but you can't do this. Listeners cannot be registered per > persistent > > types, only per session factory. AR uses base types to differ types that > go > > into different session factories, therefore you can narrow the event > > listener registration per type. > > > > You have two choices: > > Check in you listener whether one of the types you are interested in was > > updated or > > Put the types in a separate session factory by creating separate > > <config>-nodes in your configuration, but this means you cannot cascade > to > > and with types in your main configs. > > -Markus > > 2009/7/29 jsmorris <[email protected]> > >> > >> I am experimenting with using NHibernate events to track/audit changes > >> on my domain model using the AR EventListener attributes, but I am > >> running into a problems setting them up. > >> > >> I am using a recent nightly (1261) of the castle stack on a local dev > >> environment (win xp) against a sqlite db. > >> > >> I have created several listener classes to do some testing (see > >> listing below) with the different ways to wire up the listeners. > >> > >> The two ways that I have successfully got an event to fire > >> OnPostUpdate was to use just the [EventListener] attribute or the > >> [assembly: AddEventListener(typeof(GlobalByAssemblyEventListener))] > >> attribute. This is not ideal for my situation because I would like to > >> create EventListeners that specifically watch only one or a small > >> number of similar domain objects which all inherit a common base class > >> or implement an interface. So, I tried to configure the > >> EventListeners with the Include argument, but I have been unsuccessful > >> at getting an EventListener to only fire for one specific type. I > >> tried to use [EventListener(Include = new [] { typeof(Project) })] or > >> [assembly: AddEventListener(typeof(ProjectByAssemblyEventListener), > >> Include = new[] { typeof(Project) })] but neither events fired (or the > >> methods were never called). > >> > >> Any help, ideas, suggestions would be appreciated to allow me to > >> configure an EventListener for one or more domain objects. > >> > >> Finally, my end solution is to be able to use the container > >> integration as specified in the spec, "All components added to the > >> container that specify an NHibernate event listener interface as > >> service will be added for that specific event." However, I want to > >> answer this question before moving on to other scenarios. > >> > >> Thanks, > >> Jason > >> > >> PS Here is the complete listing of all my attempts at configuration. > >> > >> [assembly: AddEventListener(typeof(GlobalByAssemblyEventListener))] > >> [assembly: AddEventListener(typeof(ProjectByAssemblyEventListener), > >> Include = new[] { typeof(Project) })] > >> > >> namespace Foo > >> { > >> [EventListener] > >> public class GlobalEventListener : IPostUpdateEventListener > >> { > >> public void OnPostUpdate(PostUpdateEvent @event) > >> { > >> var project = @event.Entity as Project; > >> > >> new ProjectComment { Note = "GlobalEventListener", Project > >> = project, Owner = project.Owner.Name }.Save(); > >> } > >> } > >> > >> [EventListener(Include = new [] { typeof(Project) })] > >> public class ProjectEventListener : IPostUpdateEventListener > >> { > >> public void OnPostUpdate(PostUpdateEvent @event) > >> { > >> var project = @event.Entity as Project; > >> > >> new ProjectComment { Note = "ProjectEventListener", > >> Project = project, Owner = project.Owner.Name }.Save(); > >> } > >> } > >> > >> public class GlobalByAssemblyEventListener : IPostUpdateEventListener > >> { > >> public void OnPostUpdate(PostUpdateEvent @event) > >> { > >> var project = @event.Entity as Project; > >> > >> new ProjectComment { Note = > >> "GlobalByAssemblyEventListener", Project = project, Owner = > >> project.Owner.Name }.Save(); > >> } > >> } > >> > >> public class ProjectByAssemblyEventListener : > IPostUpdateEventListener > >> { > >> public void OnPostUpdate(PostUpdateEvent @event) > >> { > >> var project = @event.Entity as Project; > >> > >> new ProjectComment { Note = > >> "ProjectByAssemblyEventListener", Project = project, Owner = > >> project.Owner.Name }.Save(); > >> } > >> } > >> } > >> >> > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" 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/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
