class
Di::Registry
- Di::Registry
- Reference
- Object
Overview
Internal registry for storing providers and tracking shutdown order. Uses a string key format: "TypeName" for default, "TypeName/name" for named providers. Thread-safe for multi-threaded Crystal (-Dpreview_mt).
Defined in:
di/registry.crClass Method Summary
-
.key(type_name : String, service_name : String | Nil = nil) : String
Build a registry key from type name and optional service name.
Instance Method Summary
-
#clear : Nil
Clear all providers and reset order.
-
#each(& : String, Provider::Base -> )
Iterate over all providers with their keys.
-
#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.
-
#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.
Class Method Detail
Build a registry key from type name and optional service name.
Instance Method Detail
Iterate over all providers with their keys. Note: Holds mutex for the duration of iteration.
Get a provider by key, raising ServiceNotFound if not registered.
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. Use this when callbacks may call back into Di (e.g., health checks).