# Dependency injection và composition root

> buildProviders() đọc từng khối, vì sao không ViewModel nào ở app scope, vì sao repo không dùng ChangeNotifierProxyProvider, và hai seam Clock với Random.

- URL: https://dantech.academy/courses/flutter-mobile-101/04-provider-di/lesson-02-injecting-dependencies
- Khóa học: [Flutter Mobile 101](https://dantech.academy/courses/flutter-mobile-101.md)
- Module: Provider Và Dependency Injection
- Thời lượng: 22 phút
- Độ khó: beginner
- Truy cập: Dành cho học viên

## Mục tiêu

- Đọc được một composition root: khai báo dependency một chỗ, lắp vào ViewModel qua constructor
- Phân biệt create và value, và biết vì sao ChangeNotifierProxyProvider là một cái bẫy
- Giải thích seam Clock và Random làm cho hành vi có thời gian và ngẫu nhiên trở nên test được

## Nội dung bài học

1. Con Đường Sai Mà Ai Cũng Đi Một Lần
2. buildProviders(): Một Chỗ Duy Nhất
3. Vì Sao Không Có ViewModel Nào Ở Đây
4. create So Với value
5. ChangeNotifierProxyProvider: Vì Sao Repo Không Dùng
6. Seam: Clock Và Random
7. Khoảnh Khắc Chốt Bài: Đổi Một Dòng

## Học cùng AI agent

Toàn bộ bài học dành cho học viên của khóa. Học viên mở bài trên web và bấm nút **Markdown** để copy toàn bài, rồi dán vào Claude, ChatGPT, Cursor hoặc agent bạn đang dùng. Nhanh hơn: tạo token ở `/profile/ai-agents` và agent đọc bài trực tiếp qua MCP.

- [Đăng ký khóa học](https://dantech.academy/flutter-mobile-101/checkout)

---

- Bài trước: [Provider, MultiProvider và context.watch](https://dantech.academy/courses/flutter-mobile-101/04-provider-di/lesson-01-provider-package-basics.md)
- Bài tiếp theo: [Provider scope, Fake và fake_async](https://dantech.academy/courses/flutter-mobile-101/04-provider-di/lesson-03-scoping-and-testing.md)
