File tree 2 files changed +29
-0
lines changed
2 files changed +29
-0
lines changed Original file line number Diff line number Diff line change @@ -25,6 +25,11 @@ def __init__(self, service: Service):
25
25
self .service = service
26
26
27
27
28
+ class NestedService :
29
+ def __init__ (self , factory_service : FactoryService ):
30
+ self .factory_service = factory_service
31
+
32
+
28
33
def init_service ():
29
34
service = Service ()
30
35
service .init ()
@@ -37,6 +42,7 @@ class Container(containers.DeclarativeContainer):
37
42
service = providers .Resource (init_service )
38
43
factory_service = providers .Factory (FactoryService , service )
39
44
factory_service_kwargs = providers .Factory (FactoryService , service = service )
45
+ nested_service = providers .Factory (NestedService , factory_service )
40
46
41
47
42
48
@inject
@@ -52,3 +58,9 @@ def test_function_dependency(factory: FactoryService = Closing[Provide["factory_
52
58
@inject
53
59
def test_function_dependency_kwargs (factory : FactoryService = Closing [Provide ["factory_service_kwargs" ]]):
54
60
return factory
61
+
62
+
63
+ def test_function_nested_dependency (
64
+ nested : NestedService = Closing [Provide ["nested_service" ]]
65
+ ):
66
+ return nested
Original file line number Diff line number Diff line change @@ -319,6 +319,23 @@ def test_closing_dependency_resource_kwargs():
319
319
assert result_2 .service .shutdown_counter == 2
320
320
321
321
322
+ @mark .usefixtures ("resourceclosing_container" )
323
+ def test_closing_nested_dependency_resource ():
324
+ resourceclosing .Service .reset_counter ()
325
+
326
+ result_1 = resourceclosing .test_function_nested_dependency ()
327
+ assert isinstance (result_1 , resourceclosing .NestedService )
328
+ assert result_1 .factory_service .service .init_counter == 1
329
+ assert result_1 .factory_service .service .shutdown_counter == 1
330
+
331
+ result_2 = resourceclosing .test_function_nested_dependency ()
332
+ assert isinstance (result_2 , resourceclosing .NestedService )
333
+ assert result_2 .factory_service .service .init_counter == 2
334
+ assert result_2 .factory_service .service .shutdown_counter == 2
335
+
336
+ assert result_1 is not result_2
337
+
338
+
322
339
@mark .usefixtures ("resourceclosing_container" )
323
340
def test_closing_resource_bypass_marker_injection ():
324
341
resourceclosing .Service .reset_counter ()
You can’t perform that action at this time.
0 commit comments