Refactor AppServices into assembly, feature facades, and lifecycle coordinator.

Extract dependency wiring and session lifecycle from the container and RootViewController, split NetworkBundle by domain, and add module-level feature services while keeping flat accessors for compatibility.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-29 09:32:44 +08:00
parent 1a6d4a1791
commit 0d8f97417b
11 changed files with 686 additions and 197 deletions

View File

@ -28,6 +28,7 @@ final class AppServicesTests: XCTestCase {
XCTAssertNotNil(services.context.accountContext)
XCTAssertNotNil(services.ui.toastCenter)
XCTAssertNotNil(services.runtime.scenicQueueRuntime)
XCTAssertIdentical(services.network.apiClient as AnyObject, services.apiClient as AnyObject)
}
/// bundle
@ -35,7 +36,10 @@ final class AppServicesTests: XCTestCase {
let services = AppServices(apiClient: APIClient(session: AppServicesRecordingURLSession()))
XCTAssertIdentical(services.appSession as AnyObject, services.session.appSession as AnyObject)
XCTAssertIdentical(services.ordersAPI as AnyObject, services.network.ordersAPI as AnyObject)
XCTAssertIdentical(services.authAPI as AnyObject, services.network.account.authAPI as AnyObject)
XCTAssertIdentical(services.ordersAPI as AnyObject, services.network.commerce.ordersAPI as AnyObject)
XCTAssertIdentical(services.scenicQueueAPI as AnyObject, services.network.operation.scenicQueueAPI as AnyObject)
XCTAssertIdentical(services.assetsAPI as AnyObject, services.network.content.assetsAPI as AnyObject)
XCTAssertIdentical(services.toastCenter as AnyObject, services.ui.toastCenter as AnyObject)
XCTAssertIdentical(services.scenicQueueRuntime as AnyObject, services.runtime.scenicQueueRuntime as AnyObject)
}