Injector

Latest version: v0.22.0

Safety actively analyzes 714973 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 5 of 6

0.11.0

------

* The following way to declare dependencies is introduced and recommended
now:

.. code-block:: python

class SomeClass:
inject
def __init__(self, other: OtherClass):
...

The following ways are still supported but are deprecated and will be
removed in the future:

.. code-block:: python

Python 2-compatible style
class SomeClass
inject(other=OtherClass)
def __init__(self, other):
...

Python 3 style without inject-decoration but with use_annotations
class SomeClass:
def __init__(self, other: OtherClass):
...

injector = Injector(use_annotations=True)
...

* The following way to declare Module provider methods is introduced and
recommended now:

.. code-block:: python

class MyModule(Module):
provider
def provide_something(self, dependency: Dependency) -> Something:
...

provider implies inject.

Previously it would look like this:

.. code-block:: python

class MyModule(Module):
provides(Something)
inject
def provide_something(self, dependency: Dependency):
...

The :func:`~injector.provides` decorator will be removed in the future.

* Added a :func:`~injector.noninjectable` decorator to mark parameters as not injectable
(this serves as documentation and a way to avoid some runtime errors)


Backwards incompatible:

* Removed support for decorating classes with :func:`inject <injector.inject>`. Previously:

.. code-block:: python

inject(something=Something)
class Class:
pass

Now:

.. code-block:: python

class Class:
inject
def __init__(self, something: Something):
self.something = something

* Removed support for injecting partially applied functions, previously:

.. code-block:: python

inject(something=Something)
def some_function(something):
pass


class Class:
inject(function=some_function)
def __init__(self, function):
...

Now you need to move the function with injectable dependencies to a class.

* Removed support for getting :class:`AssistedBuilder(callable=...) <injector.AssistedBuilder>`
* Dropped Python 2.6 support
* Changed the way :class:`~injector.AssistedBuilder` and :class:`~injector.ProviderOf` are used.
Previously:

.. code-block:: python

builder1 = injector.get(AssistedBuilder(Something))
or: builder1 = injector.get(AssistedBuilder(interface=Something))
builder2 = injector.get(AssistedBuilder(cls=SomethingElse))
provider = injector.get(ProviderOf(SomeOtherThing))

Now:

.. code-block:: python

builder1 = injector.get(AssistedBuilder[Something])
builder2 = injector.get(ClassAssistedBuilder[cls=SomethingElse])
provider = injector.get(ProviderOf[SomeOtherThing])

* Removed support for injecting into non-constructor methods

0.10.1

------

- Fixed a false positive bug in dependency cycle detection (AssistedBuilder can be
used to break dependency cycles now)

0.10.0

------

- :meth:`injector.Provider.get()` now requires an :class:`injector.Injector` instance as
its parameter
- deprecated injecting arguments into modules (be it functions/callables,
:class:`~injector.Module` constructors or :meth:`injector.Module.configure` methods)
- removed `extends` decorator
- few classes got useful __repr__ implementations
- fixed injecting ProviderOf and AssistedBuilders when :class:`injector.Injector`
auto_bind is set to False (previously would result in `UnsatisfiedRequirement`
error)
- fixed crash occurring when Python 3-function annotation use is enabled and
__init__ method has a return value annotation ("injector.UnknownProvider:
couldn't determine provider for None to None"), should also apply to free
functions as well

0.9.1

-----
- Bug fix release.

0.9.0

-----

- Child :class:`~injector.Injector` can rebind dependancies bound in parent Injector (that changes :class:`~injector.Provider` semantics), thanks to Ilya Orlov
- :class:`~injector.CallableProvider` callables can be injected into, thanks to Ilya Strukov
- One can request :class:`~injector.ProviderOf` (Interface) and get a :class:`~injector.BoundProvider` which can be used to get an implementation of Interface when needed

0.8.0

-----

- Binding annotations are removed. Use :func:`~injector.Key` to create unique types instead.

Page 5 of 6

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.