MCPcopy Index your code
hub / github.com/d3fvxl/di

github.com/d3fvxl/di @v1.12.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.12.0 ↗ · + Follow
208 symbols 521 edges 25 files 120 documented · 58%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

DI

Documentation GitHub release (latest by date) GitHub Workflow Status (with branch) Go Report Card Codecov

DI is a dependency injection library for the Go programming language.

Dependency injection is a form of inversion of control that increases modularity and extensibility in your programs. This library helps you organize responsibilities in your codebase and makes it easy to combine low-level implementations into high-level behavior without boilerplate.

Features

  • Intuitive auto wiring
  • Interface implementations
  • Constructor injection
  • Optional injection
  • Field injection
  • Lazy-loading
  • Tagging
  • Grouping
  • Iteration
  • Decoration
  • Cleanup
  • Container Chaining / Scopes

Installation

go get github.com/defval/di

Documentation

You can use the standard pkg.go.dev and inline code comments. If you are new to auto-wiring libraries such as google/wire or uber-go/dig, start with the tutorial.

Essential Reading

Example Usage

package main

import (
    "context"
    "fmt"
    "log"
    "net/http"
    "os"
    "os/signal"
    "syscall"

    "github.com/defval/di"
)

func main() {
    di.SetTracer(&di.StdTracer{})
    // create container
    c, err := di.New(
        di.Provide(NewContext),  // provide application context
        di.Provide(NewServer),   // provide http server
        di.Provide(NewServeMux), // provide http serve mux
        // controllers as []Controller group
        di.Provide(NewOrderController, di.As(new(Controller))),
        di.Provide(NewUserController, di.As(new(Controller))),
    )
    // handle container errors
    if err != nil {
        log.Fatal(err)
    }
    // invoke function
    if err := c.Invoke(StartServer); err != nil {
        log.Fatal(err)
    }
}

Full code available here.

Questions

If you have any questions, feel free to create an issue.

Extension points exported contracts — how you extend this code

Tracer (Interface)
Tracer traces dependency injection cycle. [2 implementers]
tracer.go
Option (Interface)
Option is a functional option that configures container. If you don't know about functional options, see https://dave.ch [2 …
options.go
Controller (Interface)
Controller is an interface that can register its routes. [2 implementers]
_examples/tutorial/main.go
Invocation (Interface)
Invocation is a function whose signature looks like: func StartServer(server *http.Server) error { return server.Lis
container.go
MyFunc (FuncType)
(no doc)
container_test.go
InvokeOption (Interface)
InvokeOption is a functional option interface that modify invoke behaviour. [2 implementers]
options.go
ValueFunc (FuncType)
ValueFunc is a lazy-loading wrapper for iteration.
container.go
Fn (FuncType)
(no doc)
container_test.go

Core symbols most depended-on inside this repo

Provide
called by 129
container.go
New
called by 122
container.go
Resolve
called by 84
container.go
As
called by 26
options.go
Provide
called by 21
options.go
Invoke
called by 13
container.go
WithName
called by 12
options.go
AddParent
called by 10
container.go

Shape

Function 73
Method 70
Struct 38
Interface 15
FuncType 8
TypeAlias 4

Languages

Go100%

Modules by API surface

options.go37 symbols
container_test.go29 symbols
container.go23 symbols
_examples/tutorial/main.go15 symbols
schema.go13 symbols
tags.go10 symbols
cmp_ctor.go10 symbols
inject.go9 symbols
_examples/goway/main.go9 symbols
tracer.go7 symbols
node.go6 symbols
inspect.go6 symbols

For agents

$ claude mcp add di \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact