a DI Container
from slack import Container
c = Container()
class Component:
def __init__(self):
pass
c.register('component', Component)
c1 = c.provide('component')
c2 = c.provide('component') # c1 is c2
class Component:
def __init__(self, dep1, dep2):
pass
c.register('dep1', Dep1)
c.register('dep2', Dep2)
c.register('component', Component)
c.provide('component')
class Component:
def __init__(self, dep1, dep2):
pass
NewComponent = c.inject(Component, 'dep1')
c = NewComponent(dep2)
c.register('comp1')
def comp1(dep1, dep2):
return SomeClass()
def fn(a, b):
pass
@c.register('b')
def provide_b():
pass
c.apply(fn, a=val)
@c.register('comp', group='once')
class Component:
pass
comp1 = c.provide('comp')
comp2 = c.provide('comp') # comp1 is comp2
c.reset('once')
comp3 = c.provide('comp') # comp3 is not comp2
conf = dict(
db_host='localhost',
db_port='2345'
)
c.config(conf)
@c.register(db)
def get_db(host, port):
assert host == conf.host
assert port == conf.port
component registration in config
conf = dict(
cache='redis:Redis',
cache_host='localhost',
cache_port='2345'
)
c.config(conf)
c.cache.set('key', 'value')