package di import ( "cellbot/internal/config" "cellbot/internal/engine" "cellbot/internal/protocol" "cellbot/pkg/net" "go.uber.org/fx" "go.uber.org/zap" ) // ProvideLogger 提供日志实例 func ProvideLogger(cfg *config.Config) (*zap.Logger, error) { return config.InitLogger(&cfg.Log) } // ProvideConfig 提供配置实例 func ProvideConfig() (*config.Config, error) { configManager := config.NewConfigManager("configs/config.toml", zap.NewNop()) if err := configManager.Load(); err != nil { return nil, err } return configManager.Get(), nil } // ProvideConfigManager 提供配置管理器 func ProvideConfigManager(logger *zap.Logger) (*config.ConfigManager, error) { configManager := config.NewConfigManager("configs/config.toml", logger) if err := configManager.Load(); err != nil { return nil, err } // 启动配置文件监听 if err := configManager.Watch(); err != nil { logger.Warn("Failed to watch config file", zap.Error(err)) } return configManager, nil } // ProvideEventBus 提供事件总线 func ProvideEventBus(logger *zap.Logger) *engine.EventBus { return engine.NewEventBus(logger, 10000) } // ProvideDispatcher 提供事件分发器 func ProvideDispatcher(eventBus *engine.EventBus, logger *zap.Logger) *engine.Dispatcher { return engine.NewDispatcher(eventBus, logger) } // ProvideBotManager 提供机器人管理器 func ProvideBotManager(logger *zap.Logger) *protocol.BotManager { return protocol.NewBotManager(logger) } // ProvideServer 提供HTTP服务器 func ProvideServer(cfg *config.Config, logger *zap.Logger, botManager *protocol.BotManager, eventBus *engine.EventBus) *net.Server { return net.NewServer(cfg.Server.Host, cfg.Server.Port, logger, botManager, eventBus) } // Providers 依赖注入提供者列表 var Providers = fx.Options( fx.Provide( ProvideConfig, ProvideConfigManager, ProvideLogger, ProvideEventBus, ProvideDispatcher, ProvideBotManager, ProvideServer, ), )