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( = {}, &initialize_block) raise Sinject::DependencyRegistrationKeyNotSpecifiedException.new unless .has_key?(:key) raise Sinject::DependencyRegistrationClassNotSpecifiedException.new unless .has_key?(:class) key = [:key] dependency_class_name = [: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 != nil && [:singleton] == true single_instance = true end if != nil && [:contract] != nil contract_class_name = [: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 |