Skip to content

Instantly share code, notes, and snippets.

@SazzadR
Last active June 30, 2022 22:54
Show Gist options
  • Save SazzadR/1dbe5c57c455b70b1e9ffc9815b50566 to your computer and use it in GitHub Desktop.
Save SazzadR/1dbe5c57c455b70b1e9ffc9815b50566 to your computer and use it in GitHub Desktop.
Dead simple depedency injection container (IoC container) in Python
class DIContainer:
bindings = {}
def set(self, abstract, factory):
self.bindings[abstract] = factory
def get(self, abstract):
return self.bindings[abstract](self)
class Logger:
def __init__(self):
pass
def log(self):
print("Log message")
class DBStorage:
def __init__(self, logger: Logger):
self.logger = logger
def store(self):
print("Store data")
class ShippingService:
def __init__(self, db_storage: DBStorage):
self.db_storage = db_storage
def ship(self):
print("Ship product")
container = DIContainer()
container.set(ShippingService, lambda container: ShippingService(container.get(DBStorage)))
container.set(DBStorage, lambda container: DBStorage(container.get(Logger)))
container.set(Logger, lambda container: Logger())
# shopping_service = ShippingService(DBStorage(Logger())) # Without IoC container
shipping_service = container.get(ShippingService)
shipping_service.ship()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment