Injector

class clink.com.Injector[source]

Object management

add_prim(com_obj)[source]

Put an instance of component under management. Instance MUST be primitive

Parameters:

com_obj (clink.com.Component) –

Raises:
add_com(com_type)[source]

Put an component under management

Parameters:com_type (class) –
Raises:ComExistError
add_coms(com_types)[source]

Put components under management

Parameters:com_types (list[class]) –
load()[source]

Start to create instances of all of components

ref(com_type)[source]

Return reference to component

Parameters:com_type (class) –
Return type:object
sub_ref(com_type)[source]

Return references to components which extends from com_type

Parameters:com_type (class) –
Return type:list[object]

Example

injector.py
from clink.com import Injector, Component, Primitive, stamp


@stamp()
class Engine(Primitive):
    def __init__(self, name):
        self.name = name


@stamp(Engine)
class Car(Component):
    def __init__(self, engine):
        self.engine = engine

    def info(self):
        return 'A car with %s engine' % self.engine.name


@stamp(Car)
class Human(Component):
    def __init__(self, car):
        self.car = car

    def drive(self):
        print('I drive %s' % self.car.info())


engine = Engine('Turbo v8')
injector = Injector()

injector.add_prim(engine)
injector.add_com(Human)
injector.load()

car = injector.ref(Car)
print(car.info())

human = injector.ref(Human)
human.drive()

Testing

$ python injector.py
A car with Turbo v8 engine
I drive A car with Turbo v8 engine