class

Di::Registry

Inherits Di::KeyParser < Reference < Object

Internal registry for storing providers and tracking shutdown order.

Key format:

  • "Type" → default concrete registration
  • "Type:name" → named concrete registration
  • "~Type:Impl" → interface binding (unnamed)
  • "~Type:Impl:name" → interface binding (named)

Thread-safe for multi-threaded Crystal (-Dpreview_mt).

Instance methods

clear

Clear all providers and reset order.

Source
count_implementations(interface_type : String) : Int32

Count implementations for an interface type.

Source
delete(key : String) : Nil

Remove a provider by key (used for rollback on partial registration failure).

Source
each

Iterate over all providers with their keys.

Source
find_all_by_name(interface_type : String, name : String) : Array(Provider::Base)

Find all named interface providers matching ~Type:Impl:name pattern.

Source
find_all_by_name_keyed(interface_type : String, name : String) : Hash(String, Provider::Base)

Find all named interface providers keyed by full key.

Source
find_by_name(interface_type : String, name : String) : Provider::Base

Find a named interface provider by scanning for ~Type:Impl:name pattern. Raises AmbiguousServiceError if multiple matches, ServiceNotFound if none.

Source
get(key : String) : Provider::Base

Get a provider by key, raising ServiceNotFound if not registered.

Source
get?(key : String) : Provider::Base | Nil

Get a provider by key, or nil if not registered.

Source
get_all(interface_type : String) : Array(Provider::Base)

Get all providers for an interface type (keys starting with "~Type:").

Source
get_all_keyed(interface_type : String) : Hash(String, Provider::Base)

Get all providers keyed by full key for deduplication in child scopes.

Source
implementation_names(interface_type : String) : Array(String)

Get implementation names for an interface type.

Source
order

Return all registered keys in registration order.

Source
register(key : String, provider : Provider::Base) : Nil

Register a provider with the given key. Raises AlreadyRegistered if the key already exists.

Source
registered?(key : String) : Bool

Check if a provider is registered for the given key.

Source
reverse_order

Return all registered keys in reverse order (for shutdown).

Source
size

Number of registered providers.

Source
snapshot

Return a snapshot of all providers for iteration without holding mutex.

Source