// ---------------------------------------------------------------------------
// BT.Framework
// ServiceNotRegisteredException.cs — ServiceLocator 조회 실패 예외
// ---------------------------------------------------------------------------
using System;

namespace BurningTimes.Core.Patterns
{
    /// <summary>
    /// <see cref="ServiceLocator.Resolve{T}"/> 호출 시 해당 타입이 등록되지 않은 경우 발생.
    /// </summary>
    /// <remarks>
    /// silent null 반환을 금지하는 설계 원칙(§4-9 규칙 3)에 따라 명시적으로 예외를 던진다.
    /// 실패를 허용하는 호출부는 <see cref="ServiceLocator.TryResolve{T}"/>를 사용한다.
    /// </remarks>
    public sealed class ServiceNotRegisteredException : Exception
    {
        public Type ServiceType { get; }

        public ServiceNotRegisteredException(Type serviceType)
            : base($"Service '{serviceType?.FullName ?? "<null>"}' is not registered in ServiceLocator.")
        {
            ServiceType = serviceType;
        }
    }
}
