Skip to main content
Python Software Foundation 20th Year Anniversary Fundraiser  Donate today!

a DI container

Project description

# slack

a DI Container

## register and provide

```python
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

```python
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

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

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

c = NewComponent(dep2)
```

## using decorator

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

## apply

```python
def fn(a, b):
pass

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

c.apply(fn, a=val)
```

## groups and reset

```python
@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
```

Project details


Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page