Dependency Injection for Sinatra
Sinatra::DependencyInjection
adds a helper method, called container
, to access to your ruby
dependency injection container
Installation
Just add the gem to your Gemfile
gem 'dependency_injection-sinatra'
Or simply install it using rubygems:
gem install dependency_injection-sinatra
Usage
Classic Application
In a classic application simply require the helper, and start using it:
require 'sinatra'
require 'sinatra/dependency_injection'
# define a route that uses the helper
get '/' do
json container.get('awesome_service').find_trending
end
# The rest of your classic application code goes here...
Modular Application
In a modular application you need to require the helper, and then tell the application you will use it:
require 'sinatra/base'
require 'sinatra/dependency_injection'
class MyApp < Sinatra::Base
register Sinatra::DependencyInjection
# define a route that uses the helper
get '/' do
json container.get('awesome_service').find_trending
end
# The rest of your modular application code goes here...
end
Configuration path
By default it will try to load services.yml
configuration file, but if
your configuration file is stored in another place, you can easily change it:
require 'sinatra/base'
require 'sinatra/dependency_injection'
class MyApp < Sinatra::Base
register Sinatra::DependencyInjection
dependency_injection_path 'config/services.yml'
# The rest of your module application code goes here...
end