Registry¶
The injectme.DependenciesRegistry
is on of the two core classes used by injectme.
Registry’s responsiblity is to store instances and factories for registered dependencies.
The injectme.register()
, injectme.register_factory()
and
injectme.clear_dependencies()
are all shortcuts for calling appropriate methods on a
single global DependenciesRegistry
instance created by injectme to provide
Simple API.
You can create your own instance of DependenciesRegistry
. It’s not very usefule on it’s
own but provides foundation of dependencies management for injectme.Injector
.
Example:¶
from injectme import (
DependenciesRegistry,
DependencyNotFound,
DependencyAlreadyRegistered,
)
class DependencyA:
pass
class DependencyB:
pass
registry = DependenciesRegistry()
# there's no dependencies registered so we'll get an
# exception trying to get one
try:
registry.get(DependencyA)
except DependencyNotFound as err:
print("Dependency not found:")
print(err)
# let's register an instance
dep_a = DependencyA()
registry.register_instance(DependencyA, dep_a)
# and with 'get()' call we can get same instance from the registry
print("Getting DependencyA")
registered_dep_a = registry.get(DependencyA)
print("Got same instance?", dep_a is registered_dep_a)
# let's register a factory
def dep_b_factory():
print("Creating DependencyB")
return DependencyB()
registry.register_factory(DependencyB, dep_b_factory)
# same as before, use 'get()' to get instance of registered dependency
print("Getting DependencyB")
dep_b_1 = registry.get(DependencyB)
dep_b_2 = registry.get(DependencyB)
# the factory is being called for each 'get()'
print("Got same instance?", dep_b_1 is dep_b_2)
# trying to register same dependency twice
try:
registry.register_instance(DependencyA, DependencyA())
except DependencyAlreadyRegistered as err:
print("Dependency already registered:")
print(err)
# clearing registry
print("Clear registry")
registry.clear()
try:
registry.get(DependencyA)
except DependencyNotFound as err:
print("Dependency not found:")
print(err)
$ python3 example.py
Dependency not found:
Dependency <class '__main__.DependencyA'> has not been found in the registry
Getting DependencyA
Got same instance? True
Getting DependencyB
Creating DependencyB
Creating DependencyB
Got same instance? False
Dependency already registered:
Dependency <class '__main__.DependencyA'> already registered
Clear registry
Dependency not found:
Dependency <class '__main__.DependencyA'> has not been found in the registry