# fgm/izidic architecture

> Architecture diagram of the GitHub repository fgm/izidic, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/fgm/izidic
- Repository: https://github.com/fgm/izidic

## Overview

IziDIC is a small Go dependency-injection container: an application builds a container, stores parameters and service definitions, freezes it, then retrieves parameters or lazily created service instances. Services can resolve their own dependencies through the container; instances are reused, and circular service dependencies are rejected. The README also documents a typed application facade and a Resolve-style setup, with a complete demo. Runtime behavior is concentrated in izidic.go; the example implementation files are present in the tree but were not sampled.

Main entry points: [`izidic.go`](https://github.com/fgm/izidic/blob/main/izidic.go) (Service Resolver), [`examples/di/app.go`](https://github.com/fgm/izidic/blob/main/examples/di/app.go) (Typed Facade), [`examples/di/di.go`](https://github.com/fgm/izidic/blob/main/examples/di/di.go) (Resolve Setup), [`examples/demo.go`](https://github.com/fgm/izidic/blob/main/examples/demo.go) (Complete Demo)

## Diagram (Mermaid)

```mermaid
flowchart TD

node_application(("Application"))
node_container["Container<br/>[izidic.go]"]
node_parameter_store["Parameter Store<br/>[izidic.go]"]
node_service_registry["Service Registry<br/>[izidic.go]"]
node_service_resolver["Service Resolver<br/>[izidic.go]"]
node_typed_facade["Typed Facade<br/>[app.go]"]
node_resolve_setup["Resolve Setup<br/>[di.go]"]
node_demo["Complete Demo<br/>[demo.go]"]

node_application -->|"creates"| node_container
node_application -->|"stores parameters"| node_parameter_store
node_application -->|"registers services"| node_service_registry
node_application -->|"freezes"| node_container
node_application -->|"reads parameters"| node_parameter_store
node_application -->|"requests services"| node_service_resolver
node_container -->|"holds parameters"| node_parameter_store
node_container -->|"holds definitions"| node_service_registry
node_service_registry -->|"provides definitions"| node_service_resolver
node_service_resolver -->|"resolves dependencies"| node_service_resolver
node_service_resolver -->|"caches instances"| node_service_resolver
node_resolve_setup -->|"builds and freezes"| node_container
node_typed_facade -->|"accesses services"| node_service_resolver
node_typed_facade -->|"accesses parameters"| node_parameter_store
node_demo -->|"demonstrates setup"| node_resolve_setup

click node_container "https://github.com/fgm/izidic/blob/main/izidic.go"
click node_parameter_store "https://github.com/fgm/izidic/blob/main/izidic.go"
click node_service_registry "https://github.com/fgm/izidic/blob/main/izidic.go"
click node_service_resolver "https://github.com/fgm/izidic/blob/main/izidic.go"
click node_typed_facade "https://github.com/fgm/izidic/blob/main/examples/di/app.go"
click node_resolve_setup "https://github.com/fgm/izidic/blob/main/examples/di/di.go"
click node_demo "https://github.com/fgm/izidic/blob/main/examples/demo.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_application toneIndigo
class node_container,node_parameter_store,node_service_registry,node_service_resolver,node_typed_facade,node_resolve_setup,node_demo toneTeal
```

## Components

### Other components

- **Application**
- [Container](https://github.com/fgm/izidic/blob/main/izidic.go): `izidic.go`
- [Parameter Store](https://github.com/fgm/izidic/blob/main/izidic.go): `izidic.go`
- [Service Registry](https://github.com/fgm/izidic/blob/main/izidic.go): `izidic.go`
- [Service Resolver](https://github.com/fgm/izidic/blob/main/izidic.go): `izidic.go`
- [Typed Facade](https://github.com/fgm/izidic/blob/main/examples/di/app.go): `examples/di/app.go`
- [Resolve Setup](https://github.com/fgm/izidic/blob/main/examples/di/di.go): `examples/di/di.go`
- [Complete Demo](https://github.com/fgm/izidic/blob/main/examples/demo.go): `examples/demo.go`

## Connections

- Application → Container: creates (evidence: `README.md`)
- Application → Parameter Store: stores parameters (evidence: `README.md`)
- Application → Service Registry: registers services (evidence: `README.md`)
- Application → Container: freezes (evidence: `README.md`)
- Application → Parameter Store: reads parameters (evidence: `README.md`)
- Application → Service Resolver: requests services (evidence: `README.md`)
- Container → Parameter Store: holds parameters (evidence: `izidic.go`)
- Container → Service Registry: holds definitions (evidence: `izidic.go`)
- Service Registry → Service Resolver: provides definitions (evidence: `izidic.go`)
- Service Resolver → Service Resolver: resolves dependencies (evidence: `izidic.go`)
- Service Resolver → Service Resolver: caches instances (evidence: `izidic.go`)
- Resolve Setup → Container: builds and freezes (evidence: `README.md`)
- Typed Facade → Service Resolver: accesses services (evidence: `README.md`)
- Typed Facade → Parameter Store: accesses parameters (evidence: `README.md`)
- Complete Demo → Resolve Setup: demonstrates setup (evidence: `README.md`)
