class Bootstrap(object): def __init__(self): self._config = None def run(self, config_file_path): self._load_config(config_file_path) self._setup_dependencies() def _setup_dependencies(self): dependency_factory = self._get_dependency_factory() dependencies = ( (Dependencies.Factory, dependency_factory.factory), (Dependencies.Config, dependency_factory.config, inject.Scope.Transient), (Dependencies.DatabaseConnectionManager, dependency_factory.database_connection_manager, inject.Scope.Transient), ) for dependency in dependencies: inject.provide(*dependency) def _get_dependency_factory(self): """ Override point :rtype : DependencyFactory :return: """ return DependencyFactory(self._config) def _load_config(self, config_file_path): self._config = TypedConfig() with open(config_file_path) as file_pointer: self._config.readfp(file_pointer) def database_connection_manager(self): """ :rtype: ConnectionManager :return: """ database_config = dict(self._config.items('database')) print database_config connection_map = DatabaseConnectionMap() connection_map.load_from_config(database_config['config_file']) return ConnectionManager(connection_map)