class
Di::Registry
- Di::Registry
- Reference
- Object
Overview
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).
Included Modules
Extended Modules
Defined in:
di/registry.crInstance Method Summary
-
#clear : Nil
Clear all providers and reset order.
-
#count_implementations(interface_type : String) : Int32
Count implementations for an interface type.
-
#delete(key : String) : Nil
Remove a provider by key (used for rollback on partial registration failure).
-
#each(& : String, Provider::Base -> )
Iterate over all providers with their keys.
-
#find_all_by_name(interface_type : String, name : String) : Array(Provider::Base)
Find all named interface providers matching ~Type:Impl:name pattern.
-
#find_all_by_name_keyed(interface_type : String, name : String) : Hash(String, Provider::Base)
Find all named interface providers keyed by full key.
-
#find_by_name(interface_type : String, name : String) : Provider::Base
Find a named interface provider by scanning for ~Type:Impl:name pattern.
-
#get(key : String) : Provider::Base
Get a provider by key, raising ServiceNotFound if not registered.
-
#get?(key : String) : Provider::Base | Nil
Get a provider by key, or nil if not registered.
-
#get_all(interface_type : String) : Array(Provider::Base)
Get all providers for an interface type (keys starting with "~Type:").
-
#get_all_keyed(interface_type : String) : Hash(String, Provider::Base)
Get all providers keyed by full key for deduplication in child scopes.
-
#implementation_names(interface_type : String) : Array(String)
Get implementation names for an interface type.
-
#order : Array(String)
Return all registered keys in registration order.
-
#register(key : String, provider : Provider::Base) : Nil
Register a provider with the given key.
-
#registered?(key : String) : Bool
Check if a provider is registered for the given key.
-
#reverse_order : Array(String)
Return all registered keys in reverse order (for shutdown).
-
#size : Int32
Number of registered providers.
-
#snapshot : Hash(String, Provider::Base)
Return a snapshot of all providers for iteration without holding mutex.
Instance methods inherited from module Di::KeyParser
interface_prefix(interface_type : String) : String
interface_prefix,
key(type : String, impl : String | Nil = nil, name : String | Nil = nil) : String
key,
parse_key(key : String) : Tuple(String, String | Nil)
parse_key,
resolve_ambiguous(matches : Array(Provider::Base), interface_type : String, name : String) : Provider::Base
resolve_ambiguous,
resolve_ambiguous?(matches : Array(Provider::Base), interface_type : String) : Provider::Base | Nil
resolve_ambiguous?
Instance Method Detail
Count implementations for an interface type.
Remove a provider by key (used for rollback on partial registration failure).
Find all named interface providers matching ~Type:Impl:name pattern.
Find all named interface providers keyed by full key.
Find a named interface provider by scanning for ~Type:Impl:name pattern. Raises AmbiguousServiceError if multiple matches, ServiceNotFound if none.
Get a provider by key, raising ServiceNotFound if not registered.
Get all providers for an interface type (keys starting with "~Type:").
Get all providers keyed by full key for deduplication in child scopes.
Get implementation names for an interface type.
Register a provider with the given key. Raises AlreadyRegistered if the key already exists.
Return a snapshot of all providers for iteration without holding mutex.