@@ -16,27 +16,48 @@ class BaseMediator(ABC):
16
16
request to the handler.
17
17
"""
18
18
19
- def __init__ (self , * , registry : Registry ) -> None :
19
+ def __init__ (self , * , registry : Registry , dependencies : dict | None = None ) -> None :
20
20
self ._registry : Registry = registry
21
+ self ._dependencies : dict = dependencies or {}
22
+
23
+ @property
24
+ def registry (self ) -> Registry :
25
+ return self ._registry
26
+
27
+ @abstractmethod
28
+ def inject (self , ** kwargs ) -> "BaseMediator" : # type: ignore[no-untyped-def]
29
+ """
30
+ Abstract method to inject dependencies to the handler.
31
+
32
+ Args:
33
+ kwargs (dict[str, Any]): The dependencies to be injected.
34
+
35
+ Returns:
36
+ BaseMediator: A mediator instance ready to inject dependencies when making
37
+ the handler call
38
+ """
21
39
22
40
@abstractmethod
23
- def send (self , request : Request , dependencies : dict [ str , Any ] | None = None ) -> Any :
41
+ def send (self , request : Request ) -> Any :
24
42
"""
25
43
Abstract method to send the request to the handler.
26
44
27
45
Args:
28
46
request (Request): The request to be handled.
29
47
dependencies (dict[str, Any] | None, optional): A dictionary of dependencies
30
- to pass to the handler during execution.
48
+ to pass to the handler during execution.
31
49
32
50
Returns:
33
51
Any: The result from handling the request.
34
52
"""
35
53
36
54
37
55
class Mediator (BaseMediator ):
38
- def send (self , request : Request , dependencies : dict [str , Any ] | None = None ) -> Any :
39
- handler : Handler = self ._registry .get_handler (request )(** (dependencies or {}))
56
+ def inject (self , ** kwargs ) -> "Mediator" : # type: ignore[no-untyped-def]
57
+ return Mediator (registry = self .registry , dependencies = kwargs )
58
+
59
+ def send (self , request : Request ) -> Any :
60
+ handler : Handler = self ._registry .get_handler (request )(** self ._dependencies )
40
61
if not isinstance (handler , Handler ):
41
62
raise HandlerProtocolViolationException (handler .__class__ .__name__ )
42
63
return handler .handle (request )
0 commit comments