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__()
|
return self.__str__()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def provides(self):
|
||||||
|
"""Return provider."""
|
||||||
|
return self.__provides
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
"""Return provided instance.
|
"""Return provided instance.
|
||||||
|
|
||||||
|
|
|
@ -127,6 +127,9 @@ def _resolve_injections(fn: Callable[..., Any], container: AnyContainer) -> Dict
|
||||||
config,
|
config,
|
||||||
marker.provider.provides,
|
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):
|
elif isinstance(marker.provider, providers.Provider):
|
||||||
provider_name = container.resolve_provider_name(marker.provider)
|
provider_name = container.resolve_provider_name(marker.provider)
|
||||||
if not provider_name:
|
if not provider_name:
|
||||||
|
|
|
@ -30,3 +30,8 @@ def test_config_value(
|
||||||
some_value_decimal: Decimal = Provide[Container.config.a.b.c.as_(Decimal)],
|
some_value_decimal: Decimal = Provide[Container.config.a.b.c.as_(Decimal)],
|
||||||
):
|
):
|
||||||
return some_value_int, some_value_str, some_value_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(int_value, 10)
|
||||||
self.assertEqual(str_value, '10')
|
self.assertEqual(str_value, '10')
|
||||||
self.assertEqual(decimal_value, Decimal(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