# Inversion of Control

> A design rule that a framework or composition root owns object creation and control flow, and application code supplies the parts it calls.

Record: `architecture: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#architecture-inversion-of-control

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Extension Points](https://banes-lab.com/records/architecture/extension-points.md) and before [Dependency Injection](https://banes-lab.com/records/architecture/dependency-injection.md).

## 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/architecture/abstraction.md)
- [Composition Root](https://banes-lab.com/records/lexicon/composition-root.md)

## Reinforces

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

## Enables

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

## Conflicts with

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

## In tension with

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

## Tensions

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

## Severity

- [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)

## Category

- [Plugin / Extensibility / IoC](https://banes-lab.com/records/architecture-category/plugin-extensibility-ioc.md)

## Linked from

- [The direction axis](https://banes-lab.com/software-architecture/model/the-direction-axis.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/principles/architecture-category-solid-object-oriented-design.md)
- [Observability / Auditability / Traceability](https://banes-lab.com/ontology/principles/architecture-category-observability-auditability-traceability.md)
- [Plugin / Extensibility / IoC](https://banes-lab.com/ontology/principles/architecture-category-plugin-extensibility-ioc.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Plugin / Extensibility / IoC](https://banes-lab.com/ontology/lexicon/lexicon-category-plugin-extensibility-ioc.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
