- 코워크·코드 프롬프트, 도구 선택, 문서 생성/검증 흐름을 claude-code 동등 품질 기준으로 재정렬함 - OpenAI/vLLM 경로의 오래된 tool history를 평탄화하고 최근 이력만 구조화해 컨텍스트 직렬화를 경량화함 - AX Agent UI를 테마 기준으로 재구성하고 플랜 승인/오버레이/이벤트 렌더링/명령 입력 상호작용을 개선함 - 파일 후보 제안, 반복 경로 정체 복구, LSP 보강, 문서·PPT 처리 개선, 설정/서비스 인터페이스 정리를 함께 반영함 - README.md 및 docs/DEVELOPMENT.md를 작업 시점별로 갱신함 - 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ (경고 0, 오류 0)
50 lines
1.9 KiB
C#
50 lines
1.9 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace AxCopilot.Services;
|
|
|
|
/// <summary>
|
|
/// 전역 DI 서비스 로케이터.
|
|
/// 기존 수동 new 패턴에서 DI 컨테이너로의 점진적 전환을 지원합니다.
|
|
/// App.OnStartup()에서 Configure()를 호출하여 초기화합니다.
|
|
///
|
|
/// 사용법:
|
|
/// var settings = ServiceLocator.Get<ISettingsService>();
|
|
/// var storage = ServiceLocator.Get<IChatStorageService>();
|
|
/// </summary>
|
|
public static class ServiceLocator
|
|
{
|
|
private static IServiceProvider? _provider;
|
|
|
|
/// <summary>DI 컨테이너를 구성합니다. 앱 시작 시 1회만 호출합니다.</summary>
|
|
public static IServiceProvider Configure(Action<IServiceCollection> configureServices)
|
|
{
|
|
var services = new ServiceCollection();
|
|
configureServices(services);
|
|
_provider = services.BuildServiceProvider(validateScopes: true);
|
|
return _provider;
|
|
}
|
|
|
|
/// <summary>이미 생성된 ServiceProvider를 직접 설정합니다.</summary>
|
|
public static void SetProvider(IServiceProvider provider)
|
|
{
|
|
_provider = provider ?? throw new ArgumentNullException(nameof(provider));
|
|
}
|
|
|
|
/// <summary>등록된 서비스를 가져옵니다.</summary>
|
|
public static T Get<T>() where T : notnull
|
|
{
|
|
if (_provider == null)
|
|
throw new InvalidOperationException("ServiceLocator가 초기화되지 않았습니다. App.OnStartup()에서 Configure()를 호출하세요.");
|
|
return _provider.GetRequiredService<T>();
|
|
}
|
|
|
|
/// <summary>등록된 서비스를 가져옵니다. 미등록 시 null을 반환합니다.</summary>
|
|
public static T? GetOptional<T>() where T : class
|
|
{
|
|
return _provider?.GetService<T>();
|
|
}
|
|
|
|
/// <summary>내부 ServiceProvider에 직접 접근합니다. (테스트/마이그레이션용)</summary>
|
|
public static IServiceProvider? Provider => _provider;
|
|
}
|