# Dependency Injection

Record: `arch:dependency-injection`
Kind: pattern
Layer: [Extensibility Core](https://banes-lab.com/records/layer/extensibility-core.md)
Severity: recommended
Scope: class, module, component
Canonical: https://banes-lab.com/ontology#arch-dependency-injection

## Repair

- Refactored by: Inject Constructor Parameter, Add Factory
- Detected by: direct construction of external dependencies
- Violated by: newing dependencies inside business logic
- Measured by: injected dependency ratio
- Enforced by: lint rules, dependency review

## 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)
- [Testability](https://banes-lab.com/records/arch/testability.md)

## enables

- [Mocking](https://banes-lab.com/records/lex/mocking.md)
- [Replaceability](https://banes-lab.com/records/arch/replaceability.md)

## conflicts-with

- [Hardcoded Instantiation](https://banes-lab.com/records/lex/hardcoded-instantiation.md)
- [Ambient Context](https://banes-lab.com/records/arch/ambient-context.md)

## tensions-with

- [Constructor Complexity](https://banes-lab.com/records/lex/constructor-complexity.md)

## tensions

- [Dependency Injection Constructor Complexity](https://banes-lab.com/records/tension/constructor-complexity-dependency-injection.md)

## referenced-by

- [Interface-Based Design](https://banes-lab.com/records/arch/interface-based-design.md)
- [Singleton Pattern](https://banes-lab.com/records/arch/singleton-pattern.md)
- [Inversion of Control (IoC)](https://banes-lab.com/records/arch/inversion-of-control.md)
- [Dependency Inversion Principle (DIP)](https://banes-lab.com/records/arch/dependency-inversion.md)
