This commit is contained in:
Roman Mogylatov 2020-10-29 21:33:12 -04:00
parent c08ac48931
commit 5474bd2ad1
2 changed files with 50 additions and 0 deletions

View File

@ -0,0 +1,31 @@
from dependency_injector import containers, providers
from dependency_injector.wiring import Provide, Closing
class Service:
init_counter: int = 0
shutdown_counter: int = 0
@classmethod
def init(cls):
cls.init_counter += 1
@classmethod
def shutdown(cls):
cls.shutdown_counter += 1
def init_service():
service = Service()
service.init()
yield service
service.shutdown()
class Container(containers.DeclarativeContainer):
service = providers.Resource(init_service)
def test_function(service: Service = Closing[Provide[Container.service]]):
return service

View File

@ -174,3 +174,22 @@ class WiringTest(unittest.TestCase):
self.assertIsInstance(service, Service)
self.assertEqual(some_value, 1)
def test_closing_resource(self):
from wiringsamples import resourceclosing
container = resourceclosing.Container()
container.wire(modules=[resourceclosing])
self.addCleanup(container.unwire)
result_1 = resourceclosing.test_function()
self.assertIsInstance(result_1, resourceclosing.Service)
self.assertEqual(result_1.init_counter, 1)
self.assertEqual(result_1.shutdown_counter, 1)
result_2 = resourceclosing.test_function()
self.assertIsInstance(result_2, resourceclosing.Service)
self.assertEqual(result_2.init_counter, 2)
self.assertEqual(result_2.shutdown_counter, 2)
self.assertIsNot(result_1, result_2)