@@ -387,12 +387,7 @@ def make_injected_function[**P, T](
387387 / ,
388388 threadsafe : bool | None = None ,
389389 ) -> InjectedFunction [P , T ]:
390- metadata = InjectMetadata (wrapped , threadsafe )
391-
392- @metadata .task
393- def listen () -> None :
394- metadata .update (self )
395- self .add_listener (metadata )
390+ metadata = self ._metadata (wrapped , threadsafe )
396391
397392 if iscoroutinefunction (wrapped ):
398393 return AsyncInjectedFunction (metadata ) # type: ignore[arg-type, return-value]
@@ -405,11 +400,7 @@ def make_async_factory[T](
405400 / ,
406401 threadsafe : bool | None = None ,
407402 ) -> Callable [..., Awaitable [T ]]:
408- factory : InjectedFunction [..., T ] = self .make_injected_function (
409- wrapped ,
410- threadsafe ,
411- )
412- return factory .__injection_metadata__ .acall
403+ return self ._metadata (wrapped , threadsafe ).acall
413404
414405 async def afind_instance [T ](
415406 self ,
@@ -522,12 +513,14 @@ def aget_lazy_instance[T, Default](
522513 * ,
523514 threadsafe : bool | None = None ,
524515 ) -> Awaitable [T | Default ]:
525- function = self .make_injected_function (
526- lambda instance = default : instance ,
527- threadsafe = threadsafe ,
516+ return SimpleAwaitable (
517+ self ._metadata (
518+ lambda instance = default : instance ,
519+ threadsafe = threadsafe ,
520+ )
521+ .set_owner (cls ) # type: ignore[arg-type]
522+ .acall
528523 )
529- metadata = function .__injection_metadata__ .set_owner (cls )
530- return SimpleAwaitable (metadata .acall )
531524
532525 if TYPE_CHECKING : # pragma: no cover
533526
@@ -556,12 +549,14 @@ def get_lazy_instance[T, Default](
556549 * ,
557550 threadsafe : bool | None = None ,
558551 ) -> Invertible [T | Default ]:
559- function = self .make_injected_function (
560- lambda instance = default : instance ,
561- threadsafe = threadsafe ,
552+ return SimpleInvertible (
553+ self ._metadata (
554+ lambda instance = default : instance ,
555+ threadsafe = threadsafe ,
556+ )
557+ .set_owner (cls ) # type: ignore[arg-type]
558+ .call
562559 )
563- metadata = function .__injection_metadata__ .set_owner (cls )
564- return SimpleInvertible (metadata .call )
565560
566561 def update [T ](self , updater : Updater [T ]) -> Self :
567562 self .__locator .update (updater )
@@ -686,6 +681,13 @@ def dispatch(self, event: Event) -> Iterator[None]:
686681 finally :
687682 self .__debug (event )
688683
684+ def _metadata [** P , T ](
685+ self ,
686+ wrapped : Callable [P , T ],
687+ threadsafe : bool | None = None ,
688+ ) -> InjectMetadata [P , T ]:
689+ return InjectMetadata (wrapped , threadsafe ).listen (self )
690+
689691 def _iter_locators (self ) -> Iterator [Locator ]:
690692 for module in self .__modules :
691693 yield from module ._iter_locators ()
@@ -879,16 +881,14 @@ def wrapped(self) -> Callable[P, T]:
879881
880882 async def abind (self , args : Iterable [Any ], kwargs : Mapping [str , Any ]) -> Arguments :
881883 arguments = self .__get_arguments (args , kwargs )
882- dependencies = await self .__dependencies .aget_arguments (exclude = arguments )
883- if dependencies :
884+ if dependencies := await self .__dependencies .aget_arguments (exclude = arguments ):
884885 return self .__merge_arguments (arguments , dependencies )
885886
886887 return Arguments (args , kwargs )
887888
888889 def bind (self , args : Iterable [Any ], kwargs : Mapping [str , Any ]) -> Arguments :
889890 arguments = self .__get_arguments (args , kwargs )
890- dependencies = self .__dependencies .get_arguments (exclude = arguments )
891- if dependencies :
891+ if dependencies := self .__dependencies .get_arguments (exclude = arguments ):
892892 return self .__merge_arguments (arguments , dependencies )
893893
894894 return Arguments (args , kwargs )
@@ -930,6 +930,14 @@ def decorator(wp: Callable[_P, _T]) -> Callable[_P, _T]:
930930
931931 return decorator (wrapped ) if wrapped else decorator
932932
933+ def listen (self , module : Module ) -> Self :
934+ @self .task
935+ def start_listening () -> None :
936+ self .update (module )
937+ module .add_listener (self )
938+
939+ return self
940+
933941 @singledispatchmethod
934942 def on_event (self , event : Event , / ) -> ContextManager [None ] | None :
935943 return None
@@ -945,8 +953,7 @@ def __get_arguments(
945953 args : Iterable [Any ],
946954 kwargs : Mapping [str , Any ],
947955 ) -> dict [str , Any ]:
948- bound = self .signature .bind_partial (* args , ** kwargs )
949- return bound .arguments
956+ return self .signature .bind_partial (* args , ** kwargs ).arguments
950957
951958 def __merge_arguments (
952959 self ,
0 commit comments