slack

a DI container


Keywords
DI, Container
License
MIT
Install
pip install slack==0.0.3

Documentation

slack

a DI Container

register and provide

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

dependency inject

class Component:
    def __init__(self, dep1, dep2):
        pass

c.register('dep1', Dep1)
c.register('dep2', Dep2)
c.register('component', Component)
c.provide('component')

partial inject

class Component:
    def __init__(self, dep1, dep2):
        pass

NewComponent = c.inject(Component, 'dep1')

c = NewComponent(dep2)

using decorator

c.register('comp1')
def comp1(dep1, dep2):
    return SomeClass()

apply

def fn(a, b):
    pass

@c.register('b')
def provide_b():
    pass

c.apply(fn, a=val)

groups and reset

@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

from config

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')