# Inversion of Control

Record: `arch:inversion-of-control`
Kind: principle
Layer: [Extensibility Core](https://banes-lab.com/records/layer/extensibility-core.md)
Severity: recommended
Scope: framework, runtime, component
Canonical: https://banes-lab.com/ontology#arch-inversion-of-control

## Repair

- Refactored by: Introduce Container, Extract Composition Root
- Detected by: scattered object lifecycle construction
- Violated by: application manually controlling framework-owned lifecycle
- Measured by: composition centralization
- Enforced by: lifecycle rules

## requires

- [Abstraction](https://banes-lab.com/records/arch/abstraction.md)
- [Composition Root](https://banes-lab.com/records/lex/composition-root.md)

## reinforces

- [Dependency Inversion Principle (DIP)](https://banes-lab.com/records/arch/dependency-inversion.md)
- [Dependency Injection](https://banes-lab.com/records/arch/dependency-injection.md)

## enables

- [Framework Control Flow](https://banes-lab.com/records/lex/framework-control-flow.md)
- [Plugins](https://banes-lab.com/records/lex/plugins.md)

## conflicts-with

- [Direct Control Ownership](https://banes-lab.com/records/lex/direct-control-ownership.md)

## tensions-with

- [Traceability](https://banes-lab.com/records/arch/traceability.md)

## tensions

- [Inversion of Control (IoC) Traceability](https://banes-lab.com/records/tension/inversion-of-control-ioc-traceability.md)
