API Reference

Constants

injectme.__version__

Current injectme’s version.

>>> import injectme
>>> injectme.__version__
'0.0.5'

Functions

Note

These functions compose “simplified API”. They are wrappers over methods of single injectme.Injector instance.

injectme.inject

injectme.inject(cls: type) None

Mark class as a target for the injection.

Parameters

cls – Target for injection.

Raises

injectme.InjectionNotSupported – If the cls argument is not an instance of type.

It can be used either as a function or as a decorator. All of the class annotations will be inspected and provided during object instantiation.

Classes marked for injection will have their dependencies set just before calling their __init__.

Dependencies used during injection phase should be registered with either injectme.register() or injectme.register_factory() before instantiating any class which needs them.

>>> from injectme import inject, register
>>> class UsersRepository:
...     def get_user(self):
...         return ("john", "doe")
...
>>> @inject
... class UsersService:
...     users_repo: UsersRepository
...
...     def run(self):
...         print(self.users_repo.get_user())
...
>>> register(UsersRepository, UsersRepository())
>>> UsersService().run()
('john', 'doe')

If you fail to register all of the dependencies of a class you are trying to instantiate the injectme.InjectionFailure will be raised.

>>> from injectme import inject
>>> class Dependency:
...     ...
...
>>> @inject
... class SomeClass:
...     dep: Dependency
...
>>> SomeClass()
Traceback (most recent call last):
    ...
injectme.errors.InjectionFailure: ...

Note

This function is a wrapper for injectme.Injector.__call__().

injectme.register

injectme.register(dependency: type, instance: Any) None

Register dependency instance to be used during injection phase.

Parameters
  • dependency – class of dependency to be registered

  • instance – instance of dependency to be registered

Raises

injectme.DependencyAlreadyRegistered – If the dependency has already been registered.

Note

This function is a wrapper for injectme.DependenciesRegistry.register_instance().

injectme.register_factory

injectme.register_factory(dependency: type, factory: Callable[[], Any]) None

Register dependency factory to be used during injection phase.

Parameters
  • dependency – class of dependency to be registered

  • factory – factory of dependency to be registered

Raises

injectme.DependencyAlreadyRegistered – If the dependency has already been registered.

Note

This function is a wrapper for injectme.DependenciesRegistry.register_factory().

injectme.clear_dependencies

injectme.clear_dependencies() None

Clear all of the dependencies registered with injectme.register() or injectme.register_factory() prior to calling this function.

Note

This function is a wrapper for injectme.DependenciesRegistry.clear().

Classes

injectme.DependenciesRegistry

class injectme.DependenciesRegistry

Class used as a registry of instances and factories which can be used for injection.

get(dependency: type) Any

Get object registered as an instance of dependency or call callable registered as a factory of dependency.

Parameters

dependency – dependency for which a registered instance will be returned.

Raises

DependencyNotFound – raised if the dependency passed as argument has not been registered prior to making this call.

Returns

instance of dependency.

register_instance(dependency: type, instance: Any) None

Register passed object as an instance of dependency.

Parameters
  • dependency – dependency for which an instance should be registered.

  • instance – an object which should be registered as an instance of dependency.

Raises

DependencyAlreadyRegistered – raised if dependency has been already registered.

register_factory(dependency: type, factory: Callable[[], Any]) None

Register passed callable as a factory of dependency instances.

Parameters
  • dependency – dependency for which an instance should be registered.

  • factory – a callable which should be registered as a factory of dependency instances

Raises

DependencyAlreadyRegistered – raised if dependency has been already registered.

clear() None

Remove all of the registered dependencies.

injectme.Injector

class injectme.Injector(registry: Optional[DependenciesRegistry] = None)

Class responsible for the injection of dependencies.

__init__(registry: Optional[DependenciesRegistry] = None)

Initialize the Injector.

Parameters

registry – dependencies registry to be used with this Injector instance. If not sepcified, an instance of registry will be created automatically.

property registry: DependenciesRegistry

Dependencies registry associated with this Injector.

Returns

instance of registry.

__call__(cls: type) type

Mark class to be the target of injection performed with this instance of Injector.

Parameters

cls – class to be marked for injection.

Raises

InjectionFailure – raised if any of the required dependencies can’t be found in the registry associated with this Injector.

Returns

class passed as a param.

Exceptions

injectme.InjectmeException

exception injectme.InjectmeException

Base class for all injectme’s exceptions.

injectme.DependencyNotFound

exception injectme.DependencyNotFound(dependency: type)

Requested dependency has not been found in the registry.

injectme.DependencyAlreadyRegistered

exception injectme.DependencyAlreadyRegistered(dependency: type)

Dependency has already been registered in selected registry.

injectme.InjectionNotSupported

exception injectme.InjectionNotSupported(target: Any)

Decorated target is not valid for injection.

injectme.InjectionFailure

exception injectme.InjectionFailure(cls: type)

Failed to inject the dependency.