using Microsoft.Extensions.DependencyInjection; using ServerCommon; using System.Collections.Concurrent; namespace BrokerCore.Services; public class OrderStrategyProvider : IOrderStrategyProvider { private readonly IServiceProvider m_service_provider; private readonly ConcurrentDictionary m_creation_strategy_map; private readonly ConcurrentDictionary m_completion_strategy_map; public OrderStrategyProvider(IServiceProvider serviceProvider) { m_service_provider = serviceProvider; // 전략 맵핑 초기화 m_creation_strategy_map = new ConcurrentDictionary { [CaliverseItemType.Currency] = typeof(CurrencyExchangeCreationStrategy), [CaliverseItemType.CaliverseProduct] = typeof(ProductExchangeCreationStrategy) }; m_completion_strategy_map = new ConcurrentDictionary { [CaliverseItemType.Currency] = typeof(CurrencyOrderCompletionStrategy), [CaliverseItemType.CaliverseProduct] = typeof(ProductOrderCompletionStrategy) }; } public IOrderCreationStrategy? getCreationStrategy(CaliverseItemType itemType) { if (m_creation_strategy_map.TryGetValue(itemType, out var strategy_type)) { return m_service_provider.GetService(strategy_type) as IOrderCreationStrategy; } // 기본 전략 반환 return m_service_provider.GetService(); } public IOrderCompletionStrategy? getCompletionStrategy(CaliverseItemType itemType) { if (m_completion_strategy_map.TryGetValue(itemType, out var strategy_type)) { return m_service_provider.GetService(strategy_type) as IOrderCompletionStrategy; } // 기본 전략 반환 return m_service_provider.GetService(); } }