simple-di

A simple, strictly typed dependency injection library.

Install

    pip install simple_di

Usage

Examples:

    from simple_di import inject, Provide, Provider, container
    from simple_di.providers import Static, Factory, Configuration


    @container
    class OptionsClass(container):
        cpu: Provider[int] = Static(2)
        worker: Provider[int] = Factory(lambda c: 2 * int(c) + 1, c=cpu)

    Options = OptionsClass()

    @inject
    def func(worker: int = Provide[Options.worker]):
        return worker

    assert func() == 5
    assert func(1) == 1

    Options.worker.set(2)
    assert func() == 2

    Options.worker.reset()
    assert func() == 5

    Options.cpu.set(1)
    assert func() == 3

Type annotation supported

inject

Inject values into providers in function/method arguments.

Arguments:

  • squeeze_none: default False. Treat None value passed in as not passed.

GitHub

https://github.com/bentoml/simple_di