mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-10-31 16:07:51 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """`Dependency` provider example."""
 | |
| 
 | |
| import abc
 | |
| import dataclasses
 | |
| 
 | |
| from dependency_injector import containers, providers
 | |
| 
 | |
| 
 | |
| class DbAdapter(metaclass=abc.ABCMeta):
 | |
|     ...
 | |
| 
 | |
| 
 | |
| class SqliteDbAdapter(DbAdapter):
 | |
|     ...
 | |
| 
 | |
| 
 | |
| class PostgresDbAdapter(DbAdapter):
 | |
|     ...
 | |
| 
 | |
| 
 | |
| @dataclasses.dataclass
 | |
| class UserService:
 | |
|     database: DbAdapter
 | |
| 
 | |
| 
 | |
| class Container(containers.DeclarativeContainer):
 | |
| 
 | |
|     database = providers.Dependency(instance_of=DbAdapter)
 | |
| 
 | |
|     user_service = providers.Factory(
 | |
|         UserService,
 | |
|         database=database,
 | |
|     )
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     container1 = Container(database=providers.Singleton(SqliteDbAdapter))
 | |
|     container2 = Container(database=providers.Singleton(PostgresDbAdapter))
 | |
| 
 | |
|     assert isinstance(container1.user_service().database, SqliteDbAdapter)
 | |
|     assert isinstance(container2.user_service().database, PostgresDbAdapter)
 | |
| 
 | |
|     container3 = Container(database=providers.Singleton(object))
 | |
|     container3.user_service()  # <-- raises error:
 | |
|     # <object ...> is not an instance of DbAdapter
 |