---
title: FR-120 DI 組裝比對結果
---

# DI 組裝比對結果

由 `scripts/security/di_wiring_audit.py` 產出（純 AST 靜態比對，不 import 任何模組）。重跑：`python scripts/security/di_wiring_audit.py --out <本檔>`。

本表以**修正線**（`fix/security-b1` worktree）套件源碼為準，只給 FR-114 合回時對照用；與主線版的差異＝修正線新加的零件在修正線容器有沒有接。重跑指令：`python scripts/security/di_wiring_audit.py --package-root ~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security --out docs/features/FR-120-2609-host-residual-security-scan/di-wiring-audit-fixline.md`。

## 摘要

| 項目 | 數量 |
|---|---|
| 掃描的組裝檔 | 75 支 |
| provider 呼叫（Factory／Singleton 等） | 563 處 |
| 解析到建構子的 provider | 560 處（498 個不同 class／函式） |
| 必填缺接（會在建構時炸） | 1 處 |
| 可選未接（安靜缺線） | 172 處，其中預設 `None` 164 處 |
| 🔴 缺的參數名含 guard／perm／checker／authz／role | 7 處 |
| 容器給了、建構子沒有的參數（會在建構時炸） | 0 處 |
| 無法解析而略過 | 3 處 |

jedi-* 套件建構子從下列源碼讀取（依當下 venv 的安裝／`.pth` 而定，換 venv 結果可能不同）：

- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-ai-bot`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-ai-dashboard`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-asset`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-bulletin`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-common`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-compliance-audit`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-detection`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-evidence-classification`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-file-upload`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-flow-engine`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-iam`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-integrity`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-issue`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-license-runtime`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-log`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-notification`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-oscal-v2`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-remote-agent`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-survey`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-system-core`
- `~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/jedi-task-platform`

## 怎麼讀

- **必填缺接**：建構子沒預設值、容器沒給。解析 provider 當下就會 `TypeError`，通常代表該 provider 從沒被用到（死碼）或有別處 `override`。
- **可選未接**：建構子有預設值、容器沒給，service 會拿預設值。預設是 `None` 的要看 service 內部遇到 None 時是**報錯**還是**默默跳過**——後者就是安靜的缺線。
- **其他 provider 有給**：同一個 class 在別的 provider 有接這個參數，代表兩處組裝不一致，優先看。
- 🔴：參數名像安全檢查零件，缺了影響最大，掃描時優先核對。

## 🔴 安全類參數缺接（優先看）

| service | 缺的參數 | 容器位置 | provider | 其他 provider 有給 |
|---|---|---|---|---|
| `DataAPIService` | 🔴 `capability_checker`（預設 `None`） | `di_containers/ai_dashboard/ai_dashboard_containers.py:99` | `AIDashboardContainer.data_api_service`（Singleton） | — |
| `TenantProvisioningService` | 🔴 `role_templates`（預設 `None`） | `di_containers/auth/auth_containers.py:269` | `AuthContainer.tenant_provisioning_service`（Factory） | — |
| `TenantProvisioningService` | 🔴 `default_role_name`（預設 `DEFAULT_ROLE_NAME`） | `di_containers/auth/auth_containers.py:269` | `AuthContainer.tenant_provisioning_service`（Factory） | — |
| `MetadataCloneService` | 🔴 `role_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:177` | `OscalContainer.metadata_clone_service`（Factory） | — |
| `OscalIoService` | 🔴 `role_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `SurveyDiscussionService` | 🔴 `participant_role_service`（預設 `None`） | `di_containers/survey/survey_containers.py:116` | `SurveyContainer.survey_discussion_service`（Factory） | — |
| `QuestionAnswerHistoryDetailService` | 🔴 `participant_role_service`（預設 `None`） | `di_containers/task_survey/question_answer_containers.py:90` | `QuestionAnswerContainer.question_answer_history_detail_service`（Factory） | — |

## 必填缺接

| service | 缺的參數 | 容器位置 | provider | 其他 provider 有給 |
|---|---|---|---|---|
| `AgentTaskService` | `remote_agent_domain_service` | `di_containers/agent_task/agent_task_containers.py:36` | `AgentTaskContainer.agent_task_service`（Factory） | — |

## 可選未接：預設 None（像零件，優先看）

| service | 缺的參數 | 容器位置 | provider | 其他 provider 有給 |
|---|---|---|---|---|
| `DataAPIService` | 🔴 `capability_checker`（預設 `None`） | `di_containers/ai_dashboard/ai_dashboard_containers.py:99` | `AIDashboardContainer.data_api_service`（Singleton） | — |
| `TenantProvisioningService` | 🔴 `role_templates`（預設 `None`） | `di_containers/auth/auth_containers.py:269` | `AuthContainer.tenant_provisioning_service`（Factory） | — |
| `UserBatchImportService` | `row_error_formatter`（預設 `None`） | `di_containers/auth/auth_containers.py:339` | `AuthContainer.user_batch_import_service`（Factory） | — |
| `AccountMessageBuilder` | `locale`（預設 `None`） | `di_containers/auth/auth_containers.py:344` | `AuthContainer.message_builder`（Factory） | — |
| `TenantDriveIntegrationRepoImpl` | `session`（預設 `None`） | `di_containers/cloud_integration/cloud_integration_containers.py:97` | `CloudIntegrationContainer.tenant_drive_integration_repo`（Singleton） | — |
| `DriveFolderMappingRepoImpl` | `session`（預設 `None`） | `di_containers/cloud_integration/cloud_integration_containers.py:131` | `CloudIntegrationContainer.drive_folder_mapping_repo`（Singleton） | — |
| `DriveSyncJobRepoImpl` | `session`（預設 `None`） | `di_containers/cloud_integration/cloud_integration_containers.py:132` | `CloudIntegrationContainer.drive_sync_job_repo`（Singleton） | — |
| `TenantAwareClassifierContainerRunner` | `container_env`（預設 `None`） | `di_containers/evidence_classification/evidence_classification_containers.py:104` | `EvidenceClassificationContainer.container_runner`（Singleton） | — |
| `ProjectService` | `assessment_plan_task_domain_service`（預設 `None`） | `di_containers/flow_control/flow_control_containers.py:258` | `FlowControlContainer.project_service`（Factory） | — |
| `ProjectService` | `component_domain_service`（預設 `None`） | `di_containers/flow_control/flow_control_containers.py:258` | `FlowControlContainer.project_service`（Factory） | — |
| `ProjectService` | `ssp_domain_service`（預設 `None`） | `di_containers/flow_control/flow_control_containers.py:258` | `FlowControlContainer.project_service`（Factory） | — |
| `JobBindingOrphanCleanupService` | `batch_limit`（預設 `None`） | `di_containers/flow_control/flow_control_containers.py:318` | `FlowControlContainer.job_binding_orphan_cleanup_service`（Factory） | — |
| `JobBindingOrphanCleanupService` | `mode`（預設 `None`） | `di_containers/flow_control/flow_control_containers.py:318` | `FlowControlContainer.job_binding_orphan_cleanup_service`（Factory） | — |
| `PoamService` | `ar_finding_domain_service`（預設 `None`） | `di_containers/flow_control/flow_control_containers.py:545` | `FlowControlContainer.poam_service`（Factory） | — |
| `PoamService` | `mapping_domain_service`（預設 `None`） | `di_containers/flow_control/flow_control_containers.py:545` | `FlowControlContainer.poam_service`（Factory） | — |
| `PoamService` | `task_control_domain_service`（預設 `None`） | `di_containers/flow_control/flow_control_containers.py:545` | `FlowControlContainer.poam_service`（Factory） | — |
| `WorkflowExecutionService` | `assessment_plan_service`（預設 `None`） | `di_containers/flow_engine/workflow_excution_containers.py:130` | `WorkflowExecutionContainer.workflow_execution_service`（Factory） | — |
| `WorkflowExecutionService` | `assessment_plan_task_domain_service`（預設 `None`） | `di_containers/flow_engine/workflow_excution_containers.py:130` | `WorkflowExecutionContainer.workflow_execution_service`（Factory） | — |
| `IdentityContext` | `org_unit_resolver`（預設 `None`） | `di_containers/identity/identity_containers.py:31` | `IdentityContainer.identity`（Singleton） | — |
| `IdentityContext` | `tenant_resolver`（預設 `None`） | `di_containers/identity/identity_containers.py:31` | `IdentityContainer.identity`（Singleton） | — |
| `SspImportTemplateAppService` | `catalog_control_domain_service`（預設 `None`） | `di_containers/module_frame/module_frame_containers.py:231` | `ModuleFrameContainer.ssp_import_template_app_service`（Factory） | — |
| `SspImportTemplateAppService` | `catalog_group_domain_service`（預設 `None`） | `di_containers/module_frame/module_frame_containers.py:231` | `ModuleFrameContainer.ssp_import_template_app_service`（Factory） | — |
| `SspImportTemplateAppService` | `component_domain_service`（預設 `None`） | `di_containers/module_frame/module_frame_containers.py:231` | `ModuleFrameContainer.ssp_import_template_app_service`（Factory） | — |
| `SspImportTemplateAppService` | `control_implementation_domain_service`（預設 `None`） | `di_containers/module_frame/module_frame_containers.py:231` | `ModuleFrameContainer.ssp_import_template_app_service`（Factory） | — |
| `SspImportTemplateAppService` | `control_implementation_objective_domain_service`（預設 `None`） | `di_containers/module_frame/module_frame_containers.py:231` | `ModuleFrameContainer.ssp_import_template_app_service`（Factory） | — |
| `SspImportTemplateAppService` | `inventory_item_domain_service`（預設 `None`） | `di_containers/module_frame/module_frame_containers.py:231` | `ModuleFrameContainer.ssp_import_template_app_service`（Factory） | — |
| `SspImportTemplateAppService` | `leveraged_authorization_domain_service`（預設 `None`） | `di_containers/module_frame/module_frame_containers.py:231` | `ModuleFrameContainer.ssp_import_template_app_service`（Factory） | — |
| `SspImportTemplateAppService` | `party_domain_service`（預設 `None`） | `di_containers/module_frame/module_frame_containers.py:231` | `ModuleFrameContainer.ssp_import_template_app_service`（Factory） | — |
| `SspImportTemplateAppService` | `responsible_party_domain_service`（預設 `None`） | `di_containers/module_frame/module_frame_containers.py:231` | `ModuleFrameContainer.ssp_import_template_app_service`（Factory） | — |
| `SspImportTemplateAppService` | `system_characteristic_domain_service`（預設 `None`） | `di_containers/module_frame/module_frame_containers.py:231` | `ModuleFrameContainer.ssp_import_template_app_service`（Factory） | — |
| `FrameworkService` | `framework_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:169` | `OscalContainer.framework_service`（Factory） | — |
| `FrameworkService` | `framework_version_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:169` | `OscalContainer.framework_service`（Factory） | — |
| `CatalogService` | `catalog_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:170` | `OscalContainer.catalog_service`（Factory） | — |
| `CatalogService` | `control_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:170` | `OscalContainer.catalog_service`（Factory） | — |
| `CatalogService` | `group_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:170` | `OscalContainer.catalog_service`（Factory） | — |
| `CatalogService` | `metadata_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:170` | `OscalContainer.catalog_service`（Factory） | — |
| `CatalogService` | `part_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:170` | `OscalContainer.catalog_service`（Factory） | — |
| `ProfileResolutionService` | `catalog_control_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:171` | `OscalContainer.profile_resolution_service`（Factory） | — |
| `ProfileResolutionService` | `profile_import_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:171` | `OscalContainer.profile_resolution_service`（Factory） | — |
| `ProfileService` | `profile_import_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:172` | `OscalContainer.profile_service`（Factory） | — |
| `ProfileService` | `profile_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:172` | `OscalContainer.profile_service`（Factory） | — |
| `ProfileService` | `resolution_service`（預設 `None`） | `di_containers/oscal/oscal_containers.py:172` | `OscalContainer.profile_service`（Factory） | — |
| `SspCloneService` | `by_component_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `component_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `control_impl_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `diagram_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `impl_req_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `info_type_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `inventory_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `leveraged_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `ssp_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `statement_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `sys_char_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `sys_impl_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspCloneService` | `sys_user_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:174` | `OscalContainer.ssp_clone_service`（Factory） | — |
| `SspService` | `by_component_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `SspService` | `clone_service`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `SspService` | `component_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `SspService` | `control_impl_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `SspService` | `impl_req_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `SspService` | `inventory_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `SspService` | `leveraged_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `SspService` | `party_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `SspService` | `ssp_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `SspService` | `statement_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `SspService` | `sys_char_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `SspService` | `sys_impl_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:175` | `OscalContainer.ssp_service`（Factory） | — |
| `MetadataCloneService` | `metadata_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:177` | `OscalContainer.metadata_clone_service`（Factory） | — |
| `MetadataCloneService` | `party_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:177` | `OscalContainer.metadata_clone_service`（Factory） | — |
| `MetadataCloneService` | `resource_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:177` | `OscalContainer.metadata_clone_service`（Factory） | — |
| `MetadataCloneService` | 🔴 `role_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:177` | `OscalContainer.metadata_clone_service`（Factory） | — |
| `OscalCloneService` | `catalog_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:193` | `OscalContainer.oscal_clone_service`（Factory） | — |
| `OscalCloneService` | `control_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:193` | `OscalContainer.oscal_clone_service`（Factory） | — |
| `OscalCloneService` | `group_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:193` | `OscalContainer.oscal_clone_service`（Factory） | — |
| `OscalCloneService` | `metadata_clone_service`（預設 `None`） | `di_containers/oscal/oscal_containers.py:193` | `OscalContainer.oscal_clone_service`（Factory） | — |
| `OscalCloneService` | `param_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:193` | `OscalContainer.oscal_clone_service`（Factory） | — |
| `OscalCloneService` | `part_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:193` | `OscalContainer.oscal_clone_service`（Factory） | — |
| `OscalCloneService` | `profile_import_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:193` | `OscalContainer.oscal_clone_service`（Factory） | — |
| `OscalCloneService` | `profile_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:193` | `OscalContainer.oscal_clone_service`（Factory） | — |
| `OscalSnapshotService` | `metadata_clone_service`（預設 `None`） | `di_containers/oscal/oscal_containers.py:194` | `OscalContainer.oscal_snapshot_service`（Factory） | — |
| `OscalSnapshotService` | `oscal_clone_service`（預設 `None`） | `di_containers/oscal/oscal_containers.py:194` | `OscalContainer.oscal_snapshot_service`（Factory） | — |
| `OscalSnapshotService` | `profile_import_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:194` | `OscalContainer.oscal_snapshot_service`（Factory） | — |
| `OscalSnapshotService` | `ssp_clone_service`（預設 `None`） | `di_containers/oscal/oscal_containers.py:194` | `OscalContainer.oscal_snapshot_service`（Factory） | — |
| `OscalSnapshotService` | `ssp_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:194` | `OscalContainer.oscal_snapshot_service`（Factory） | — |
| `ApDraftService` | `ap_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:196` | `OscalContainer.ap_draft_service`（Factory） | — |
| `ApDraftService` | `control_impl_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:196` | `OscalContainer.ap_draft_service`（Factory） | — |
| `ApDraftService` | `impl_req_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:196` | `OscalContainer.ap_draft_service`（Factory） | — |
| `ApDraftService` | `metadata_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:196` | `OscalContainer.ap_draft_service`（Factory） | — |
| `ApDraftService` | `reviewed_controls_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:196` | `OscalContainer.ap_draft_service`（Factory） | — |
| `ApDraftService` | `ssp_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:196` | `OscalContainer.ap_draft_service`（Factory） | — |
| `AssessmentPlanService` | `ap_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:197` | `OscalContainer.assessment_plan_service`（Factory） | — |
| `AssessmentPlanService` | `draft_service`（預設 `None`） | `di_containers/oscal/oscal_containers.py:197` | `OscalContainer.assessment_plan_service`（Factory） | — |
| `AssessmentPlanService` | `reviewed_controls_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:197` | `OscalContainer.assessment_plan_service`（Factory） | — |
| `AssessmentPlanService` | `subjects_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:197` | `OscalContainer.assessment_plan_service`（Factory） | — |
| `AssessmentPlanService` | `tasks_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:197` | `OscalContainer.assessment_plan_service`（Factory） | — |
| `ArFindingMatrixService` | `finding_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:199` | `OscalContainer.ar_finding_matrix_service`（Factory） | — |
| `AssessmentResultService` | `ar_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:200` | `OscalContainer.assessment_result_service`（Factory） | — |
| `AssessmentResultService` | `ar_results_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:200` | `OscalContainer.assessment_result_service`（Factory） | — |
| `AssessmentResultService` | `ar_subjects_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:200` | `OscalContainer.assessment_result_service`（Factory） | — |
| `AssessmentResultService` | `matrix_service`（預設 `None`） | `di_containers/oscal/oscal_containers.py:200` | `OscalContainer.assessment_result_service`（Factory） | — |
| `AssessmentResultService` | `metadata_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:200` | `OscalContainer.assessment_result_service`（Factory） | — |
| `AssessmentRiskService` | `finding_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:201` | `OscalContainer.assessment_risk_service`（Factory） | — |
| `AssessmentRiskService` | `finding_risk_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:201` | `OscalContainer.assessment_risk_service`（Factory） | — |
| `AssessmentRiskService` | `risk_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:201` | `OscalContainer.assessment_risk_service`（Factory） | — |
| `PoamService` | `finding_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:203` | `OscalContainer.poam_service`（Factory） | — |
| `PoamService` | `metadata_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:203` | `OscalContainer.poam_service`（Factory） | — |
| `PoamService` | `poam_item_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:203` | `OscalContainer.poam_service`（Factory） | — |
| `PoamService` | `poam_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:203` | `OscalContainer.poam_service`（Factory） | — |
| `RemediationService` | `milestone_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:204` | `OscalContainer.remediation_service`（Factory） | — |
| `RemediationService` | `remediation_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:204` | `OscalContainer.remediation_service`（Factory） | — |
| `OscalIoService` | `ap_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `ar_finding_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `ar_observation_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `ar_remediation_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `ar_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `ar_results_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `ar_risk_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `by_component_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `catalog_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `component_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `control_impl_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `control_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `group_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `impl_req_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `info_type_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `inventory_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `leveraged_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `metadata_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `param_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `part_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `party_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `poam_item_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `poam_milestone_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `poam_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `profile_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `resource_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | 🔴 `role_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `ssp_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `statement_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `sys_char_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `OscalIoService` | `sys_impl_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:206` | `OscalContainer.oscal_io_service`（Factory） | — |
| `FrameworkVersionEditService` | `catalog_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:223` | `OscalContainer.framework_version_edit_service`（Factory） | — |
| `FrameworkVersionEditService` | `control_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:223` | `OscalContainer.framework_version_edit_service`（Factory） | — |
| `FrameworkVersionEditService` | `framework_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:223` | `OscalContainer.framework_version_edit_service`（Factory） | — |
| `FrameworkVersionEditService` | `framework_version_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:223` | `OscalContainer.framework_version_edit_service`（Factory） | — |
| `FrameworkVersionEditService` | `group_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:223` | `OscalContainer.framework_version_edit_service`（Factory） | — |
| `FrameworkVersionEditService` | `part_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:223` | `OscalContainer.framework_version_edit_service`（Factory） | — |
| `FrameworkVersionEditService` | `profile_import_repo`（預設 `None`） | `di_containers/oscal/oscal_containers.py:223` | `OscalContainer.framework_version_edit_service`（Factory） | — |
| `SspPermissionChecker` | `ssp_context_resolver`（預設 `None`） | `di_containers/oscal/oscal_containers.py:300` | `OscalContainer.ssp_permission_checker`（Factory） | — |
| `SspDocxGenerator` | `template_path`（預設 `None`） | `di_containers/oscal/oscal_containers.py:412` | `OscalContainer.ssp_docx_generator`（Singleton） | — |
| `SspLibreOfficeConverter` | `libreoffice_cmd`（預設 `None`） | `di_containers/oscal/oscal_containers.py:413` | `OscalContainer.ssp_libreoffice_converter`（Singleton） | — |
| `SurveyDomainService` | `survey_folder_repo`（預設 `None`） | `di_containers/survey/survey_containers.py:39` | `SurveyContainer.survey_domain_service`（Factory） | — |
| `SurveyDiscussionService` | 🔴 `participant_role_service`（預設 `None`） | `di_containers/survey/survey_containers.py:116` | `SurveyContainer.survey_discussion_service`（Factory） | — |
| `SurveyDiscussionService` | `task_project_resolver`（預設 `None`） | `di_containers/survey/survey_containers.py:116` | `SurveyContainer.survey_discussion_service`（Factory） | — |
| `SurveyDiscussionService` | `task_survey_domain_service`（預設 `None`） | `di_containers/survey/survey_containers.py:116` | `SurveyContainer.survey_discussion_service`（Factory） | — |
| `SurveyPageDomainService` | `survey_repo`（預設 `None`） | `di_containers/task_survey/question_answer_containers.py:50` | `QuestionAnswerContainer.survey_page_domain_service`（Factory） | `di_containers/survey/survey_containers.py:49` |
| `QuestionAnswerService` | `task_project_resolver`（預設 `None`） | `di_containers/task_survey/question_answer_containers.py:68` | `QuestionAnswerContainer.question_answer_service`（Factory） | — |
| `QuestionAnswerHistoryService` | `task_project_resolver`（預設 `None`） | `di_containers/task_survey/question_answer_containers.py:80` | `QuestionAnswerContainer.question_answer_history_service`（Factory） | — |
| `QuestionAnswerHistoryDetailService` | 🔴 `participant_role_service`（預設 `None`） | `di_containers/task_survey/question_answer_containers.py:90` | `QuestionAnswerContainer.question_answer_history_detail_service`（Factory） | — |
| `QuestionAnswerHistoryDetailService` | `question_answer_history_domain_service`（預設 `None`） | `di_containers/task_survey/question_answer_containers.py:90` | `QuestionAnswerContainer.question_answer_history_detail_service`（Factory） | — |
| `QuestionAnswerHistoryDetailService` | `task_project_resolver`（預設 `None`） | `di_containers/task_survey/question_answer_containers.py:90` | `QuestionAnswerContainer.question_answer_history_detail_service`（Factory） | — |
| `QuestionAnswerHistoryDetailService` | `task_survey_domain_service`（預設 `None`） | `di_containers/task_survey/question_answer_containers.py:90` | `QuestionAnswerContainer.question_answer_history_detail_service`（Factory） | — |
| `TaskSurveyService` | `task_project_resolver`（預設 `None`） | `di_containers/task_survey/task_survey_containers.py:44` | `TaskSurveyContainer.task_survey_service`（Factory） | — |
| `UploadFileService` | `file_access_policy`（預設 `None`） | `di_containers/upload_file/upload_file_containers.py:23` | `UploadFileContainer.upload_file_service`（Factory） | — |

## 可選未接：預設非 None（多為設定值，通常不是缺線）

| service | 缺的參數 | 容器位置 | provider | 其他 provider 有給 |
|---|---|---|---|---|
| `TenantProvisioningService` | `default_org_unit_name`（預設 `DEFAULT_ORG_UNIT_NAME`） | `di_containers/auth/auth_containers.py:269` | `AuthContainer.tenant_provisioning_service`（Factory） | — |
| `TenantProvisioningService` | 🔴 `default_role_name`（預設 `DEFAULT_ROLE_NAME`） | `di_containers/auth/auth_containers.py:269` | `AuthContainer.tenant_provisioning_service`（Factory） | — |
| `TenantAwareClassifierContainerRunner` | `container_network`（預設 `DEFAULT_CONTAINER_NETWORK`） | `di_containers/evidence_classification/evidence_classification_containers.py:104` | `EvidenceClassificationContainer.container_runner`（Singleton） | — |
| `TenantAwareClassifierContainerRunner` | `jobs_base_dir`（預設 `os.path.join(os.path.expanduser('~'), '.cm-jobs')`） | `di_containers/evidence_classification/evidence_classification_containers.py:104` | `EvidenceClassificationContainer.container_runner`（Singleton） | — |
| `LibreOfficeDocumentConverterAdapter` | `timeout`（預設 `120`） | `di_containers/evidence_classification/evidence_classification_containers.py:117` | `EvidenceClassificationContainer.document_converter`（Singleton） | — |
| `LoginDomainService` | `config`（預設 `LoginConfigDTO()`） | `di_containers/login/login_containers.py:33` | `LoginContainer.login_domain_service`（Factory） | — |
| `SspLibreOfficeConverter` | `timeout`（預設 `60`） | `di_containers/oscal/oscal_containers.py:413` | `OscalContainer.ssp_libreoffice_converter`（Singleton） | — |
| `DiagLogReader` | `basename`（預設 `'app.log'`） | `di_containers/support/support_containers.py:54` | `SupportContainer.diag_log_reader`（Singleton） | — |

## 容器給了、建構子沒有的參數

無。

## 無法解析而略過

| 容器位置 | provider 目標 | 原因 |
|---|---|---|
| `di_containers/cloud_integration/cloud_integration_containers.py:155` | `lambda mgr: mgr.get_valid_access_token` | provider 目標不是可解析的 class／函式名（lambda、屬性鏈等），略過 |
| `di_containers/evidence_classification/evidence_classification_containers.py:92` | `lambda mgr: mgr.get_valid_access_token` | provider 目標不是可解析的 class／函式名（lambda、屬性鏈等），略過 |
| `di_containers/evidence_classification/evidence_classification_containers.py:106` | `lambda: build_config().classifier_image` | provider 目標不是可解析的 class／函式名（lambda、屬性鏈等），略過 |

