Method: Sinject::Container#register

Defined in:
lib/sinject/container.rb

#register(options = {}, &initialize_block) ⇒ Object

Register an object with the container. Objects can be registered as either a single instance or a multi instance object. Single instance objects are only initialized once and the same object is returned from the container for every request. Multi instance objects are a new instance that is created for each request.

Example:

>> Sinject::Container.instance.register { :key => :object_key, :class => ClassName, :singleton => true, :contract => ContractName }

Arguments:

key:  (Symbol)
class_name: (ClassName)
single_instance:  (Boolean)


43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/sinject/container.rb', line 43

def register(options = {}, &initialize_block)
  raise Sinject::DependencyRegistrationKeyNotSpecifiedException.new unless options.has_key?(:key)

  raise Sinject::DependencyRegistrationClassNotSpecifiedException.new unless options.has_key?(:class)

  key = options[:key]
  dependency_class_name = options[:class]

  # check if a dependency has already been registered for this key.
  raise Sinject::DependencyRegistrationException.new(key) if registered?(key)

  single_instance = false
  contract_class_name = nil

  if options != nil && options[:singleton] == true
    single_instance = true
  end

  if options != nil && options[:contract] != nil
    contract_class_name = options[:contract]
  end

  # Validate the dependency class against the contract if a contract has been specified
  validate_contract(dependency_class_name, contract_class_name) unless contract_class_name.nil?

  item = Sinject::ContainerItem.new
  item.key = key
  item.single_instance = single_instance
  item.class_name = dependency_class_name
  item.initialize_block = initialize_block

  @store[item.key] = item
  true
end