mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-02-07 07:00:49 +03:00
Implement wiring for Provide[foo.provider]
This commit is contained in:
parent
c20c57ae7c
commit
6d92df32aa
File diff suppressed because it is too large
Load Diff
|
@ -391,6 +391,11 @@ cdef class Delegate(Provider):
|
|||
"""
|
||||
return self.__str__()
|
||||
|
||||
@property
|
||||
def provides(self):
|
||||
"""Return provider."""
|
||||
return self.__provides
|
||||
|
||||
cpdef object _provide(self, tuple args, dict kwargs):
|
||||
"""Return provided instance.
|
||||
|
||||
|
|
|
@ -127,6 +127,9 @@ def _resolve_injections(fn: Callable[..., Any], container: AnyContainer) -> Dict
|
|||
config,
|
||||
marker.provider.provides,
|
||||
)
|
||||
elif isinstance(marker.provider, providers.Delegate):
|
||||
provider_name = container.resolve_provider_name(marker.provider.provides)
|
||||
provider = container.providers[provider_name]
|
||||
elif isinstance(marker.provider, providers.Provider):
|
||||
provider_name = container.resolve_provider_name(marker.provider)
|
||||
if not provider_name:
|
||||
|
|
|
@ -30,3 +30,8 @@ def test_config_value(
|
|||
some_value_decimal: Decimal = Provide[Container.config.a.b.c.as_(Decimal)],
|
||||
):
|
||||
return some_value_int, some_value_str, some_value_decimal
|
||||
|
||||
|
||||
def test_provide_provider(service_provider: Callable[..., Service] = Provider[Container.service.provider]):
|
||||
service = service_provider()
|
||||
return service
|
||||
|
|
|
@ -58,3 +58,7 @@ class WiringTest(unittest.TestCase):
|
|||
self.assertEqual(int_value, 10)
|
||||
self.assertEqual(str_value, '10')
|
||||
self.assertEqual(decimal_value, Decimal(10))
|
||||
|
||||
def test_provide_provider(self):
|
||||
service = module.test_provide_provider()
|
||||
self.assertIsInstance(service, Service)
|
||||
|
|
Loading…
Reference in New Issue
Block a user