mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-10-31 07:57:43 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Declarative IoC container's provider injections example."""
 | |
| 
 | |
| import sqlite3
 | |
| import collections
 | |
| 
 | |
| import dependency_injector.containers as containers
 | |
| import dependency_injector.providers as providers
 | |
| 
 | |
| 
 | |
| UsersService = collections.namedtuple('UsersService', ['db'])
 | |
| AuthService = collections.namedtuple('AuthService', ['db', 'users_service'])
 | |
| 
 | |
| 
 | |
| class Services(containers.DeclarativeContainer):
 | |
|     """IoC container of service providers."""
 | |
| 
 | |
|     database = providers.Singleton(sqlite3.connect, ':memory:')
 | |
| 
 | |
|     users = providers.Factory(UsersService,
 | |
|                               db=database)
 | |
| 
 | |
|     auth = providers.Factory(AuthService,
 | |
|                              db=database,
 | |
|                              users_service=users)
 | |
| 
 | |
| 
 | |
| # Retrieving service providers from container:
 | |
| users_service = Services.users()
 | |
| auth_service = Services.auth()
 | |
| 
 | |
| # Making some asserts:
 | |
| assert users_service.db is auth_service.db is Services.database()
 | |
| assert isinstance(auth_service.users_service, UsersService)
 | |
| assert users_service is not Services.users()
 | |
| assert auth_service is not Services.auth()
 |