Skip to content

Commit a064b27

Browse files
committed
Add support for class name defined by parameters
1 parent b98e042 commit a064b27

File tree

4 files changed

+21
-21
lines changed

4 files changed

+21
-21
lines changed

ioc/component.py

+17-17
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,7 @@ class WeakReference(Reference):
3131

3232
class Definition(object):
3333
def __init__(self, clazz=None, arguments=None, kwargs=None):
34-
self.module = None
35-
self.function = None
36-
37-
if clazz:
38-
if isinstance(clazz, list):
39-
self.module = clazz[0]
40-
self.function = clazz[1]
41-
else:
42-
self.module = ".".join(clazz.split(".")[0:-1])
43-
self.function = clazz.split(".")[-1]
44-
34+
self.clazz = clazz
4535
self.arguments = {} if arguments is None else arguments
4636
self.kwargs = {} if kwargs is None else kwargs
4737
self.method_calls = []
@@ -188,13 +178,23 @@ def build_container(self, container):
188178
# @todo: start a threaded pool
189179

190180
def get_class(self, definition):
191-
m = importlib.import_module(definition.module)
192181

193-
f = definition.function.split(".")
194-
clazz = getattr(m, f[0])
182+
clazz = self.parameter_resolver.resolve(definition.clazz, self.parameters)
183+
184+
if isinstance(clazz, list):
185+
module = clazz[0]
186+
function = clazz[1]
187+
else:
188+
module = ".".join(clazz.split(".")[0:-1])
189+
function = clazz.split(".")[-1]
190+
191+
module = importlib.import_module(module)
192+
193+
function = function.split(".")
194+
clazz = getattr(module, function[0])
195195

196-
if len(f) == 2:
197-
return getattr(clazz, f[1])
196+
if len(function) == 2:
197+
return getattr(clazz, function[1])
198198

199199
return clazz
200200

@@ -228,7 +228,7 @@ def get_instance(self, klass, definition, container):
228228
def get_service(self, id, definition, container):
229229

230230
if self.logger:
231-
self.logger.debug("Get service: id=%s, module=%s, function=%s" % (id, definition.module, definition.function))
231+
self.logger.debug("Get service: id=%s, class=%s" % (id, definition.clazz))
232232

233233
if container.has(id):
234234
return container.get(id)

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setup(
77
name="ioc",
8-
version="0.0.4",
8+
version="0.0.5",
99
description="A small dependency injection container based on Symfony2 Dependency Component",
1010
author="Thomas Rabaix",
1111
author_email="[email protected]",

tests/fixtures/services.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
parameters:
22
foo.bar: argument 1
33
foo.foo: "the %foo.bar%"
4+
foo.class: "tests.ioc.service.Foo"
45

56
services:
67
fake:
@@ -14,7 +15,7 @@ services:
1415
- [ set_ok, [ true ], {arg2: "arg"} ]
1516

1617
foo:
17-
class: tests.ioc.service.Foo
18+
class: '%foo.class%'
1819
arguments: ["@fake", "#@weak_reference"]
1920
kargs: {}
2021

tests/ioc/component.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
class TestDefinition(unittest.TestCase):
88
def test_init(self):
99
definition = ioc.component.Definition()
10-
self.assertIsNone(definition.module)
11-
self.assertIsNone(definition.function)
10+
self.assertIsNone(definition.clazz)
1211
self.assertEquals(0, len(definition.arguments))
1312

1413
class TestParameterHolder(unittest.TestCase):

0 commit comments

Comments
 (0)