def test_if_class_can_be_used_as_key(self): locator = ObjectLocator() test_object = TestClass1() locator.register(TestClass1, test_object) instance = locator.get(TestClass1) assert instance is not None assert isinstance(instance, TestClass1)
def test_if_registered_object_is_resolved_by_key(self): localtor = ObjectLocator() test_object = TestClass1() localtor.register(TEST_CLASS_1_NAME, test_object) instance = localtor.get(TEST_CLASS_1_NAME) assert instance is not None assert isinstance(instance, type(test_object)) assert test_object is instance
class SimpleContainer(object): def __init__(self, name='', locator=None): if locator is not None: if not isinstance(locator, LocatorBase): raise TypeError('locator must be instance of class derived from %s' % LocatorBase.__class__.__name__) self._locator = locator else: self._locator = ObjectLocator() self._name = name def register_object(self, key, obj): provider = providers.ObjectProvider(obj) self._register_provider_for_key(key, provider) def register_callable(self, key, callable_object, lifetime=InstanceLifetime.NewInstancePerCall): if lifetime == InstanceLifetime.NewInstancePerCall: provider = providers.NewInstancesProvider(callable_object) elif lifetime == InstanceLifetime.SingletonEager: provider = providers.EagerSingleInstanceProvider(callable_object) elif lifetime == InstanceLifetime.SingletonLazy: provider = providers.LazySingleInstanceProvider(callable_object) else: raise TypeError('Unsuported instance lifetime.') self._register_provider_for_key(key, provider) def register_callable_with_deps(self, key, callable_object, lifetime=InstanceLifetime.NewInstancePerCall): if lifetime == InstanceLifetime.NewInstancePerCall: provider = providers.NewInstancesWithDepsProvider(callable_object, self) elif lifetime == InstanceLifetime.SingletonEager: provider = providers.EagerSingleInstanceWithDepsProvider(callable_object, self) elif lifetime == InstanceLifetime.SingletonLazy: provider = providers.LazySingleInstanceWithDepsProvider(callable_object, self) else: raise TypeError('Unsuported instance lifetime.') self._register_provider_for_key(key, provider) def get(self, key): return self._resolve(key) def build(self, cls): provider = providers.NewInstancesWithDepsProvider(cls, self) return provider.get() @property def name(self): return self._name def _resolve(self, key): return self._locator.get(key).get() def _register_provider_for_key(self, id, provider): self._locator.register(id, provider)
def test_if_resolving_unregistered_object_raises_exception(self): localtor = ObjectLocator() with pytest.raises(KeyError): localtor.get(TEST_CLASS_1_NAME)