pyqt_reactive.services.service_registry
Service registry for decoupled component lookup.
Provides a central registry where components can register themselves and other components can look them up by interface/type. This decouples UI layout from service discovery, preventing breakage when widgets are moved.
Example
# Automatic registration via mixin class MyWidget(QWidget, AutoRegisterServiceMixin):
SERVICE_TYPE = MyWidget # Register as this type
# Lookup anywhere widget = ServiceRegistry.get(MyWidget)
Classes
|
Mixin for widgets that auto-register with ServiceRegistry. |
Central registry for application services/components. |
- class pyqt_reactive.services.service_registry.ServiceRegistry[source]
Central registry for application services/components.
Decouples service consumers from service providers by allowing registration and lookup by type/interface rather than widget hierarchy.
- classmethod register(service_type: Type[T], instance: T) None[source]
Register a service instance for a given type.
- Parameters:
service_type – The type/interface to register under
instance – The service instance
- classmethod get(service_type: Type[T]) T | None[source]
Get a registered service by type.
- Parameters:
service_type – The type/interface to look up
- Returns:
The registered instance, or None if not found
- class pyqt_reactive.services.service_registry.AutoRegisterServiceMixin(*args, **kwargs)[source]
Mixin for widgets that auto-register with ServiceRegistry.
Widgets inherit from this mixin to automatically register themselves when created and unregister when destroyed. By default, concrete classes register using their own class type (type(self)).
Example
- class MyWidget(QWidget, AutoRegisterServiceMixin):
# Auto-registers as MyWidget - no SERVICE_TYPE needed! pass
- To customize the registration type (e.g., register as an interface):
- class MyWidget(QWidget, AutoRegisterServiceMixin):
SERVICE_TYPE = IMyInterface # Register under interface type
- To disable auto-registration (for abstract base classes):
- class AbstractWidget(QWidget, AutoRegisterServiceMixin):
SERVICE_TYPE = None # Won’t auto-register