Lỗi thường gặp
Trang này tổng hợp các lỗi phổ biến khi dùng Dix và cách xử lý nhanh.
Nhóm Parser
parser/validation: provider function must return exactly one value
- Nguyên nhân: hàm
@Injectablekhông return hoặc return nhiều hơn một giá trị. - Cách sửa: đảm bảo provider chỉ return đúng một giá trị.
parser/validation: singleton dependency must be di.Singleton[T], not *di.Singleton[T]
- Nguyên nhân: dùng sai dạng
*di.Singleton[T]. - Cách sửa: đổi sang
di.Singleton[T].
parser/package_load: failed to load Go packages
- Nguyên nhân: source không compile được theo context parser hoặc package lỗi.
- Cách sửa: kiểm tra lỗi Go compiler/type checker ở package được báo.
Nhóm Generate / Graph
generator/validation: cannot find @Root provider
- Nguyên nhân: chưa có provider được đánh dấu
@Roothợp lệ. - Cách sửa: thêm
@Injectable+@Rootcho đúng một hàm root.
generator/graph_build: provider must declare a return value
- Nguyên nhân: provider bị thiếu return type hoặc metadata không hợp lệ.
- Cách sửa: sửa chữ ký provider để có return hợp lệ.
generator/dependency_resolution: singleton dependency provider not found
- Nguyên nhân: dependency singleton không có provider trả về kiểu tương ứng.
- Cách sửa: thêm provider đúng type.
generator/dependency_resolution: dependency is not available in generated container scope
- Nguyên nhân: dependency thường chưa được tạo trong scope generate.
- Cách sửa: kiểm tra graph và type matching giữa provider return/param.
generator/dependency_resolution: circular dependency detected [provider=<ProviderName>]
- Nguyên nhân: graph dependency bị vòng (ví dụ
A -> B -> C -> A) nên không thể sắp xếp thứ tự khởi tạo. - Cách sửa:
- Tách một dependency trong vòng thành abstraction khác.
- Dời phần phụ thuộc chéo sang method/runtime wiring thay vì constructor injection trực tiếp.
- Kiểm tra lại type return/param để tránh vô tình tạo vòng qua interface tương đương.
generator/dependency_resolution: disabled provider cannot be used as dependency or root [provider=<ProviderName>]
- Nguyên nhân: một provider được đánh dấu
@Disablenhưng vẫn nằm trong dependency chain từ@Root. - Cách sửa:
- Bỏ
@Disablenếu provider đó vẫn cần dùng. - Hoặc thay dependency bằng provider khác còn hoạt động.
- Nếu provider đã deprecated, tách root/dependency graph để không còn tham chiếu vào provider này.
- Bỏ
Nhóm Build và Run
Error: exit status 1
- Nguyên nhân: bước
go runhoặcgo buildcủa project thất bại sau khi đã generate. - Cách sửa: đọc log compiler/runtime ngay phía trên để xử lý lỗi ứng dụng.
Nhóm Go Workspace
parser/workspace: no go.work found from <dir>
- Nguyên nhân: dùng cờ
--workspacenhưng Dix không tìm thấy tệpgo.workở thư mục quét hoặc các thư mục cha. - Cách sửa: đảm bảo đã khởi tạo
go.workở thư mục gốc của monorepo (go work init ...) hoặc chỉ định đúng đường dẫn thư mục.
parser/workspace: workspace module <moduleDir> does not contain go.mod
- Nguyên nhân: một đường dẫn module được khai báo trong
use (...)củago.workkhông chứa filego.mod. - Cách sửa: kiểm tra lại các đường dẫn khai báo trong
go.workhoặc bổ sung filego.modcho module đó.
parser/workspace: workspace file <workFile> does not declare any modules
- Nguyên nhân: tệp
go.workkhông khai báo bất kỳ module nào trong khốiuse. - Cách sửa: thêm các module cần thiết vào
go.work(ví dụgo work use ./apps/api).
Gợi ý debug nhanh
- Chạy
dix run .để xem lỗi parser/generate trước. - Nếu parser báo type mismatch, so sánh chính xác kiểu
Tvà*T. - Nếu graph báo thiếu provider, kiểm tra provider đó đã có
@Injectablechưa.