// RDEPUBReaderDependencies.swift // EPUB 阅读器依赖注入配置,定义显示环境协议与核心组件工厂 import UIKit /// 阅读器显示环境协议,抽象屏幕亮度和视口尺寸以支持测试和多平台适配 public protocol RDEPUBReaderDisplayEnvironment: AnyObject { /// 当前屏幕亮度,取值范围 0.0 ~ 1.0 var currentBrightness: CGFloat { get set } /// 后备视口尺寸,用于无法获取实际视图尺寸时的布局计算 var fallbackViewportSize: CGSize { get } } /// 基于 UIScreen 的默认显示环境实现,直接读写系统屏幕亮度 public final class RDEPUBUIScreenEnvironment: RDEPUBReaderDisplayEnvironment { public init() {} public var currentBrightness: CGFloat { get { CGFloat(UIScreen.main.brightness) } set { UIScreen.main.brightness = newValue } } public var fallbackViewportSize: CGSize { UIScreen.main.bounds.size } } /// EPUB 阅读器核心依赖容器,通过工厂闭包注入各组件以便替换和测试 public struct RDEPUBReaderDependencies { /// 显示环境实例 public var environment: any RDEPUBReaderDisplayEnvironment /// EPUB 解析器工厂 public var makeParser: () -> RDEPUBParser /// 分页器工厂 public var makePaginator: () -> RDEPUBPaginator /// 富文本书籍构建器工厂 public var makeTextBookBuilder: (RDEPUBTextRenderer, RDEPUBTextBookCache?, RDEPUBTextLayoutConfig) -> RDEPUBTextBookBuilder /// 纯文本书籍构建器工厂 public var makePlainTextBookBuilder: (RDEPUBTextRenderer, RDEPUBTextLayoutConfig) -> RDPlainTextBookBuilder /// 文本渲染器工厂 public var makeTextRenderer: (RDEPUBTextRenderingEngine) -> RDEPUBTextRenderer /// 初始化依赖容器 /// - Parameters: /// - environment: 显示环境实例 /// - makeParser: EPUB 解析器工厂闭包 /// - makePaginator: 分页器工厂闭包 /// - makeTextBookBuilder: 富文本书籍构建器工厂闭包 /// - makePlainTextBookBuilder: 纯文本书籍构建器工厂闭包 /// - makeTextRenderer: 文本渲染器工厂闭包 public init( environment: any RDEPUBReaderDisplayEnvironment, makeParser: @escaping () -> RDEPUBParser, makePaginator: @escaping () -> RDEPUBPaginator, makeTextBookBuilder: @escaping (RDEPUBTextRenderer, RDEPUBTextBookCache?, RDEPUBTextLayoutConfig) -> RDEPUBTextBookBuilder, makePlainTextBookBuilder: @escaping (RDEPUBTextRenderer, RDEPUBTextLayoutConfig) -> RDPlainTextBookBuilder, makeTextRenderer: @escaping (RDEPUBTextRenderingEngine) -> RDEPUBTextRenderer ) { self.environment = environment self.makeParser = makeParser self.makePaginator = makePaginator self.makeTextBookBuilder = makeTextBookBuilder self.makePlainTextBookBuilder = makePlainTextBookBuilder self.makeTextRenderer = makeTextRenderer } /// 默认生产环境依赖,使用系统屏幕环境和标准组件实现 public static var live: RDEPUBReaderDependencies { RDEPUBReaderDependencies( environment: RDEPUBUIScreenEnvironment(), makeParser: { RDEPUBParser() }, makePaginator: { RDEPUBPaginator() }, makeTextBookBuilder: { renderer, cache, layoutConfig in RDEPUBTextBookBuilder(renderer: renderer, cache: cache, layoutConfig: layoutConfig) }, makePlainTextBookBuilder: { renderer, layoutConfig in RDPlainTextBookBuilder(renderer: renderer, layoutConfig: layoutConfig) }, makeTextRenderer: { engine in switch engine { case .dtCoreText: return RDEPUBDTCoreTextRenderer() } } ) } }