class Di::Registry

Overview

Internal registry for storing providers and tracking shutdown order.

Key format:

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

Included Modules

Extended Modules

Defined in:

di/registry.cr

Instance Method Summary

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

def clear : Nil #

Clear all providers and reset order.


[View source]
def count_implementations(interface_type : String) : Int32 #

Count implementations for an interface type.


[View source]
def delete(key : String) : Nil #

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


[View source]
def each(& : String, Provider::Base -> ) #

Iterate over all providers with their keys.


[View source]
def find_all_by_name(interface_type : String, name : String) : Array(Provider::Base) #

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


[View source]
def find_all_by_name_keyed(interface_type : String, name : String) : Hash(String, Provider::Base) #

Find all named interface providers keyed by full key.


[View source]
def 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.


[View source]
def get(key : String) : Provider::Base #

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


[View source]
def get?(key : String) : Provider::Base | Nil #

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


[View source]
def get_all(interface_type : String) : Array(Provider::Base) #

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


[View source]
def get_all_keyed(interface_type : String) : Hash(String, Provider::Base) #

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


[View source]
def implementation_names(interface_type : String) : Array(String) #

Get implementation names for an interface type.


[View source]
def order : Array(String) #

Return all registered keys in registration order.


[View source]
def register(key : String, provider : Provider::Base) : Nil #

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


[View source]
def registered?(key : String) : Bool #

Check if a provider is registered for the given key.


[View source]
def reverse_order : Array(String) #

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


[View source]
def size : Int32 #

Number of registered providers.


[View source]
def snapshot : Hash(String, Provider::Base) #

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


[View source]