Forge
1.x
Docs/Forge/DI and Lifecycle
Open

Deprecated

Use Cortex, Shield, Sentinel, Weave or Nexus instead.

Reading1 min
Updated31 Jul 2026
Sourcev1/extensions/ai/di-lifecycle.mdx

Preferred DI Pattern01

Use constructor registration and type-based resolution as your default style.

// Register constructors
forge.ProvideConstructor(c, func(db *Database, logger forge.Logger) *UserService {
    return &UserService{db: db, logger: logger}
})
// Resolve by type (no string keys needed)
userService, err := forge.InjectType[*UserService](c)

eventBus, _ := vessel.InjectType[interfaces.EventBus](app.Container())

AI Extension Constructor Graph02

ai.Extension.Register(app) registers these constructors eagerly:

  1. aisdk.LLMManager

  2. aisdk.StateStore

  3. aisdk.VectorStore

  4. *AgentFactory

  5. *AgentManager

  6. Optional training services when Training.Enabled is true

Alias Keys Used by AI Extension03

  • forge.ai.llmManager

  • forge.ai.sdk.llmManager

  • forge.ai.sdk.stateStore

  • forge.ai.sdk.vectorStore

  • vectorStore (legacy alias)

  • forge.ai.agentFactory

  • forge.ai.agentManager

  • forge.ai.training.modelTrainer

  • forge.ai.training.dataManager

  • forge.ai.training.pipelineManager

Resolution Helpers04

Use these first in app code:

  • ai.GetLLMManager(c) / ai.MustGetLLMManager(c)

  • ai.GetStateStore(c) / ai.MustGetStateStore(c)

  • ai.GetVectorStore(c) / ai.MustGetVectorStore(c)

  • ai.GetAgentFactory(c) / ai.MustGetAgentFactory(c)

  • ai.GetAgentManager(c) / ai.MustGetAgentManager(c)

Training helpers (only when enabled):

  • ai.GetModelTrainer(c)

  • ai.GetDataManager(c)

  • ai.GetPipelineManager(c)

Lifecycle Behavior05

  • Register: wires constructors and logs setup details.

  • Start: marks extension started and increments metric forge.ai.extension.started.

  • Stop: marks extension stopped and increments metric forge.ai.extension.stopped.

  • Health: returns nil.

Override Strategy06

When you need custom implementations:

  • register your own constructor before app start

  • provide expected aliases for backward-compatible resolution

  • keep type-based resolution for app code

This keeps your app code clean while remaining compatible with extension internals.