sourceafIoc::RegistryShutdownHub.fan


**
** Event hub for notifications when the `Registry` shuts down. All listeners need to immutable 
** funcs, which essentially means only 'const' classes can contribute.
** 
** Common usage is add listeners in your service ctor:
** 
** pre>
**   new make(RegistryShutdownHub shutdownHub) {
**     shutdownHub.addRegistryShutdownListener |->| {
**       this.shutdown
**     }
**   }
** <pre
** 
const mixin RegistryShutdownHub {

    ** Adds a listener that will be notified when the registry shuts down. Note when shutdown 
    ** listeners are called, the state of other dependent services is unassured. If your listener 
    ** depends on other services use 'addRegistryWillShutdownListener()' 
    **  
    ** Errs thrown by the listener will be logged and ignored.
    ** 
    ** Each listener has a unique id (case insensitive) that is used by the constraints for 
    ** ordering. Each constraint must start with the prefix 'BEFORE:' or 'AFTER:'.
    ** 
    ** pre>
    **   config.addOrdered("Breakfast", eggs)
    **   config.addOrdered("Lunch", ["AFTER: breakfast", "BEFORE: dinner"], ham)
    **   config.addOrdered("Dinner", pie)
    ** <pre
    abstract Void addRegistryShutdownListener(Str id, Str[] constraints, |->| listener)

    ** Adds a listener that will be notified when the registry shuts down. RegistryWillShutdown 
    ** listeners are notified before shutdown listeners.
    ** 
    ** Errs thrown by the listener will be logged and ignored.
    ** 
    ** Each listener has a unique id (case insensitive) that is used by the constraints for 
    ** ordering. Each constraint must start with the prefix 'BEFORE:' or 'AFTER:'.
    ** 
    ** pre>
    **   config.addOrdered("Breakfast", eggs)
    **   config.addOrdered("Lunch", ["AFTER: breakfast", "BEFORE: dinner"], ham)
    **   config.addOrdered("Dinner", pie)
    ** <pre
    abstract Void addRegistryWillShutdownListener(Str id, Str[] constraints, |->| listener)
    
}