Frequently Asked Questions — Injector 0.21.0 documentation

# Frequently Asked Questions

## If I use `inject()` or scope decorators on my classess will I be able to create instances of them without using Injector?

Yes. Scope decorators don’t change the way you can construct your class instances without Injector interaction.

## I’m calling this method (/function/class) but I’m getting “TypeError: XXX() takes exactly X arguments (Y given)”

Example code:

    class X:
        @inject
        def __init__(self, s: str):
            self.s = s

    def configure(binder):
        binder.bind(s, to='some string')

    injector = Injector(configure)
    x = X()

Result?

    TypeError: __init__() takes exactly 2 arguments (1 given)

Reason? There’s no global state that `Injector` modifies when it’s instantiated and configured. Its whole knowledge about bindings etc. is stored in itself. Moreover `inject()` will not make dependencies appear out of thin air when you for example attempt to create an instance of a class manually (without `Injector`’s help) - there’s no global state `@inject` decorated methods can access.

In order for `X` to be able to use bindings defined in `@inject` decoration `Injector` needs to be used (directly or indirectly) to create an instance of `X`. This means most of the time you want to just inject `X` where you need it, you can also use `Injector.get()` to obtain an instance of the class (see its documentation for usage notes).