## [ERR-20260425-004] NestJS 跨模块复用 service：必须 export 才能被外部 controller 注入

**日期**: 2026-04-25
**类别**: NestJS 依赖注入

### 问题
ADP 模块的 controller 注入了 `MeetingAttendanceAuditLogWriter`（来自 `MeetingAttendanceModule`），启动时 Nest 抛：
```
Nest can't resolve dependencies of the AdpSyncController
(AdpSchedulerService, PrismaService, ?). Please make sure that the argument
MeetingAttendanceAuditLogWriter at index [2] is available in the AdpModule module.
```

### 根因
`MeetingAttendanceModule` 在 providers 里注册了 `MeetingAttendanceAuditLogWriter`，但 **没有放进 `exports`**。NestJS 的 provider 默认是模块私有，外部模块即便 `imports` 了源模块也看不到未 export 的 provider。

### 解决
源模块 `exports: [MeetingAttendanceAuditLogWriter, ...]`。同时 `forwardRef` 在 ADP→meeting 单向依赖场景下是不必要的（没有循环），写了反而误导阅读。

### 启示
跨模块复用 service：
1. 源模块 `exports` 那个 provider
2. 消费模块 `imports` 源模块（不需要 forwardRef，除非真有循环依赖）
3. 不要本能性地加 forwardRef "防御"——它只在编译时实际形成循环 import 时才必要

---
