lib/koine/di/service_factory.rb
module Koine
module Di
class ServiceFactory
def attach_to(dependency_manager)
if shared?
dependency_manager.share(dependency_key) do |di|
create_service(di)
end
return
end
dependency_manager.set(dependency_key) do |di|
create_service(di)
end
end
def create_service(_dependency_manager)
raise 'create_service must be implemented'
end
def dependency_key
raise 'dependency_key must be implemented'
end
def shared?
false
end
class << self
private
def share(boolean)
instance_eval do
define_method :shared? do
boolean
end
end
end
def key(dependency_key)
instance_eval do
define_method :dependency_key do
dependency_key
end
end
end
end
end
end
end