Class: Dio::Injector
- Inherits:
-
Object
- Object
- Dio::Injector
- Extended by:
- Forwardable
- Defined in:
- lib/dio/injector.rb
Overview
Injector executes dependency injection. You can register and inject dependencies using this class.
Instance Method Summary collapse
-
#clear_stubs(clazz = nil) ⇒ Object
Delagated.
-
#create(clazz, *args) ⇒ Object
Creates a new instance of the given class.
-
#initialize(container = Dio::Container.new, loader_factory = Dio::LoaderFactory.new) ⇒ Injector
constructor
A new instance of Injector.
-
#inject(target) ⇒ Object
Inject dependencies to the given object.
-
#register(key, object = nil) { ... } ⇒ Dio::Injector
Registers a new dependency with the given key.
-
#reset_loader(clazz = nil) ⇒ Object
Delagated.
-
#stub_deps(clazz, deps) ⇒ Object
Delagated.
-
#wrap_load(clazz, &wrapper) ⇒ Object
Delagated.
Constructor Details
#initialize(container = Dio::Container.new, loader_factory = Dio::LoaderFactory.new) ⇒ Injector
Returns a new instance of Injector.
29 30 31 32 33 |
# File 'lib/dio/injector.rb', line 29 def initialize(container = Dio::Container.new, loader_factory = Dio::LoaderFactory.new) @container = container @loader_factory = loader_factory @original_container = nil end |
Instance Method Details
#clear_stubs(clazz = nil) ⇒ Object
Delagated.
27 |
# File 'lib/dio/injector.rb', line 27 def_delegators :@loader_factory, :wrap_load, :stub_deps, :reset_loader, :clear_stubs |
#create(clazz, *args) ⇒ Object
Creates a new instance of the given class. Dio injects dependencies to the created instance.
71 72 73 74 |
# File 'lib/dio/injector.rb', line 71 def create(clazz, *args) raise ArgumentError, "#{clazz} is not a class" unless clazz.is_a?(Class) inject(clazz.new(*args)) end |
#inject(target) ⇒ Object
Inject dependencies to the given object.
56 57 58 59 60 61 62 63 |
# File 'lib/dio/injector.rb', line 56 def inject(target) unless injectable?(target) raise ArgumentError, 'The given object does not include Dio module' end loader = @loader_factory.create(@container, target) target.__dio_inject__(loader) target end |
#register(key, object = nil) { ... } ⇒ Dio::Injector
Registers a new dependency with the given key. You can specify either an object or a factory block that creates an object.
43 44 45 46 47 48 49 50 |
# File 'lib/dio/injector.rb', line 43 def register(key, object = nil) assert_register_args_valid(object, block_given?) @container.register(key) do |*args| object = yield(*args) if block_given? injectable?(object) ? inject(object) : object end self end |
#reset_loader(clazz = nil) ⇒ Object
Delagated.
27 |
# File 'lib/dio/injector.rb', line 27 def_delegators :@loader_factory, :wrap_load, :stub_deps, :reset_loader, :clear_stubs |
#stub_deps(clazz, deps) ⇒ Object
Delagated.
27 |
# File 'lib/dio/injector.rb', line 27 def_delegators :@loader_factory, :wrap_load, :stub_deps, :reset_loader, :clear_stubs |
#wrap_load(clazz, &wrapper) ⇒ Object
Delagated.
27 |
# File 'lib/dio/injector.rb', line 27 def_delegators :@loader_factory, :wrap_load, :stub_deps, :reset_loader, :clear_stubs |