mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 01:47:36 +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
 |