wpmind/includes/Providers/ProviderRegistrar.php
LinuxJoy 0ab7d3582d refactor: 清理兼容层 + Provider 懒加载 + 路由策略可插拔
- 删除 10 个兼容层文件 (~55KB),调用方直接引用模块类
- cost-control 模块改为不可禁用,ModuleLoader 强制启用
- ProviderRegistrar 改用字符串 FQCN,添加 wpmind_provider_map filter
- IntelligentRouter 添加 wpmind_register_routing_strategies action
- routing.php 添加 class_exists() 守卫处理 analytics 模块禁用
- AjaxController analytics 端点添加 class_exists() 守卫
- 更新集成测试移除已删除文件引用

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-07 20:19:35 +08:00

69 lines
2.1 KiB
PHP

<?php
/**
* Provider 注册器
*
* @package WPMind
* @since 1.3.0
*/
declare(strict_types=1);
namespace WPMind\Providers;
use WordPress\AiClient\Providers\Http\DTO\ApiKeyRequestAuthentication;
use WordPress\AiClient\Providers\ProviderRegistry;
/**
* Provider 注册器
*/
class ProviderRegistrar
{
private const PROVIDER_MAP = [
'deepseek' => 'WPMind\\Providers\\DeepSeek\\DeepSeekProvider',
'qwen' => 'WPMind\\Providers\\Qwen\\QwenProvider',
'zhipu' => 'WPMind\\Providers\\Zhipu\\ZhipuProvider',
'moonshot' => 'WPMind\\Providers\\Moonshot\\MoonshotProvider',
'doubao' => 'WPMind\\Providers\\Doubao\\DoubaoProvider',
'siliconflow' => 'WPMind\\Providers\\SiliconFlow\\SiliconFlowProvider',
'baidu' => 'WPMind\\Providers\\Baidu\\BaiduProvider',
'minimax' => 'WPMind\\Providers\\MiniMax\\MiniMaxProvider',
];
public static function registerProviders(ProviderRegistry $registry, array $endpoints): void
{
/**
* 过滤 Provider 映射表,允许第三方注册自定义 Provider
*
* @since 3.7.0
* @param array<string, string> $map Provider ID => FQCN 映射
*/
$map = apply_filters('wpmind_provider_map', self::PROVIDER_MAP);
foreach ($map as $key => $providerClass) {
if (empty($endpoints[$key]['enabled']) || empty($endpoints[$key]['api_key'])) {
continue;
}
// 注册 Provider
$registry->registerProvider($providerClass);
// 设置 API Key 认证
$registry->setProviderRequestAuthentication(
$providerClass,
new ApiKeyRequestAuthentication($endpoints[$key]['api_key'])
);
}
}
public static function getSupportedProviderIds(): array
{
$map = apply_filters('wpmind_provider_map', self::PROVIDER_MAP);
return array_keys($map);
}
public static function getProviderClass(string $providerId): ?string
{
$map = apply_filters('wpmind_provider_map', self::PROVIDER_MAP);
return $map[$providerId] ?? null;
}
}