using Microsoft.Extensions.Configuration; namespace LazyBear.MCP.Services.GitLab; /// /// Провайдер GitLab клиента для DI /// public sealed class GitLabClientProvider : IDisposable { private readonly IConfiguration _config; private readonly object _locker; private GitLabApiClient? _client; public string? InitializationError { get; private set; } /// /// Конструктор /// /// Конфигурация приложения public GitLabClientProvider(IConfiguration config) { _config = config; _locker = new object(); } private void SetError(string message) { InitializationError = message; } /// /// Создание клиента /// public GitLabApiClient? GetClient() { var baseUrl = _config["GitLab:Url"]; if (string.IsNullOrEmpty(baseUrl)) { SetError("GitLab:Url не настроен в конфигурации."); return null; } lock (_locker) { if (_client == null) { _client = new GitLabApiClient(baseUrl); } return _client; } } public void Dispose() { _client?.Dispose(); } }