Module | Dissident::Lifecycle |
In: |
dissident/lifecycle.rb
|
Dissident::Lifecycle provides lifecycle management for Dissident.
It redefines the provide and inject methods of Dissident to keep track of the services the klasses need.
To use Dissident::Lifecycle, include it into your container. Dissident::Lifecycle uses ducktyping to figure out interfaces. Classes that can be started and stopped need to define methods both methods, start and stop. Classes that can be disposed need to implement dispose.
Example:
class SampleContainer < Dissident::Container include Dissident::Lifecycle provide :database, Database provide :logger, Logger provide :helper, Helper end Dissident.with SampleContainer do |container| container.start :database ... container.stop :database container.dispose :database end
Call dispose on klass and all dependencies of klass that support it.
# File dissident/lifecycle.rb, line 83 83: def dispose(klass) 84: fetch(klass).dispose rescue nil 85: a = [] 86: find_dependencies(klass, ["dispose"]) { |s| a << s } 87: a.reverse_each { |s| fetch(s).dispose } 88: end
Call start on all dependencies of klass that support it and klass.
# File dissident/lifecycle.rb, line 67 67: def start(klass) 68: find_dependencies(klass, ["start", "stop"]) { |s| fetch(s).start } 69: fetch(klass).start rescue nil 70: end