@@ -215,7 +215,7 @@ Method ``container.wire()`` can resolve relative imports:
215
215
216
216
.. code-block :: python
217
217
218
- # In module "yourapp.foo ":
218
+ # In module "yourapp.main ":
219
219
220
220
container.wire(
221
221
modules = [
@@ -348,6 +348,76 @@ You can use that in testing to re-create and re-wire a container before each tes
348
348
349
349
module.fn()
350
350
351
+ Wiring configuration
352
+ --------------------
353
+
354
+ You can specify wiring configuration in the container. When wiring configuration is defined,
355
+ container will call method ``.wire() `` automatically when you create an instance:
356
+
357
+ .. code-block :: python
358
+
359
+ class Container (containers .DeclarativeContainer ):
360
+
361
+ wiring_config = containers.WiringConfiguration(
362
+ modules = [
363
+ " yourapp.module1" ,
364
+ " yourapp.module2" ,
365
+ ],
366
+ packages = [
367
+ " yourapp.package1" ,
368
+ " yourapp.package2" ,
369
+ ],
370
+ )
371
+
372
+ ...
373
+
374
+
375
+ if __name__ == " __main__" :
376
+ container = Container() # container.wire() is called automatically
377
+ ...
378
+
379
+ You can also use relative imports. Container will resolve them corresponding
380
+ to the module of the container class:
381
+
382
+ .. code-block :: python
383
+
384
+ # In module "yourapp.container":
385
+
386
+ class Container (containers .DeclarativeContainer ):
387
+
388
+ wiring_config = containers.WiringConfiguration(
389
+ modules = [
390
+ " .module1" , # Resolved to: "yourapp.module1"
391
+ " .module2" , # Resolved to: "yourapp.module2"
392
+ ],
393
+ )
394
+ )
395
+
396
+
397
+ # In module "yourapp.foo.bar.main":
398
+
399
+ if __name__ == " __main__" :
400
+ container = Container() # wire to "yourapp.module1" and "yourapp.module2"
401
+ ...
402
+
403
+ To use wiring configuration and call method ``.wire() `` manually, set flag ``auto_wire=False ``:
404
+
405
+ .. code-block :: python
406
+ :emphasize- lines: 5
407
+
408
+ class Container (containers .DeclarativeContainer ):
409
+
410
+ wiring_config = containers.WiringConfiguration(
411
+ modules = [" yourapp.module1" ],
412
+ auto_wire = False ,
413
+ )
414
+
415
+
416
+ if __name__ == " __main__" :
417
+ container = Container() # container.wire() is NOT called automatically
418
+ container.wire() # wire to "yourapp.module1"
419
+ ...
420
+
351
421
.. _async-injections-wiring :
352
422
353
423
Asynchronous injections
0 commit comments