File tree Expand file tree Collapse file tree 2 files changed +30
-0
lines changed Expand file tree Collapse file tree 2 files changed +30
-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 ()
@@ -36,6 +41,7 @@ class Container(containers.DeclarativeContainer):
36
41
37
42
service = providers .Resource (init_service )
38
43
factory_service = providers .Factory (FactoryService , service )
44
+ nested_service = providers .Factory (NestedService , factory_service )
39
45
40
46
41
47
@inject
@@ -46,3 +52,10 @@ def test_function(service: Service = Closing[Provide["service"]]):
46
52
@inject
47
53
def test_function_dependency (factory : FactoryService = Closing [Provide ["factory_service" ]]):
48
54
return factory
55
+
56
+
57
+ @inject
58
+ def test_function_nested_dependency (
59
+ nested : NestedService = Closing [Provide ["nested_service" ]]
60
+ ):
61
+ return nested
Original file line number Diff line number Diff line change @@ -306,6 +306,23 @@ def test_closing_dependency_resource():
306
306
assert result_1 is not result_2
307
307
308
308
309
+ @mark .usefixtures ("resourceclosing_container" )
310
+ def test_closing_nested_dependency_resource ():
311
+ resourceclosing .Service .reset_counter ()
312
+
313
+ result_1 = resourceclosing .test_function_nested_dependency ()
314
+ assert isinstance (result_1 , resourceclosing .NestedService )
315
+ assert result_1 .factory_service .service .init_counter == 1
316
+ assert result_1 .factory_service .service .shutdown_counter == 1
317
+
318
+ result_2 = resourceclosing .test_function_nested_dependency ()
319
+ assert isinstance (result_2 , resourceclosing .NestedService )
320
+ assert result_2 .factory_service .service .init_counter == 2
321
+ assert result_2 .factory_service .service .shutdown_counter == 2
322
+
323
+ assert result_1 is not result_2
324
+
325
+
309
326
@mark .usefixtures ("resourceclosing_container" )
310
327
def test_closing_resource_bypass_marker_injection ():
311
328
resourceclosing .Service .reset_counter ()
You can’t perform that action at this time.
0 commit comments