def set_parameter(self, name, value, allow_override=False): self.logger.debug('[container#{id}] {cls}.set_parameter({name!r}, {value!r}, {allow_override!r})'.format(cls=type(self).__name__, id=id(self), **locals())) if not allow_override and name in self.refs: raise KeyError('Service container already have a definition for "{0}".'.format(name)) self.parameters[name] = value self.refs[name] = reference(self.parameters.get, name) self.refs[name].repr = repr(value) return self.refs[name]
def __init__(self, *args, **kwargs): self.refs = { 'container': reference(self) } self.parameters = {} self.scopes = { 'prototype': Scope(), 'container': CachedScope(), 'thread': ThreadLocalScope(), } if callable(self.configure): self.configure(self, *args, **kwargs) elif len(args) or len(kwargs): raise TypeError('Container of type {0} takes no arguments ({1} given)'.format(type(self), len(args) + len(kwargs)))
def ref(self, name, repr=None): ref = reference(self.get, name) if repr is not None: ref.repr = repr return ref