using Qdp.Pricing.Base.Enums; using Qdp.Pricing.Library.Common.Interfaces; using Qdp.Pricing.Library.Options.Products.Spread.Engines.Analytical; namespace YLErp.BLL.Calculation.Engine { class SpreadEngineFactory : OptionEngineFactoryBase { public static SpreadEngineFactory Instance { get => _instance ?? (_instance = new SpreadEngineFactory()); } protected SpreadEngineFactory() { } protected static SpreadEngineFactory _instance; public override IEngine GetEngine( string engineName = null, OptionExercise exercise = OptionExercise.European, params object[] additionalParams) { if (string.IsNullOrWhiteSpace(engineName)) { return DefaultEngine(exercise, additionalParams); } else { switch (engineName.ToUpper()) { case "ANALYTICALSPREADOPTIONKIRKENGINE": return new AnalyticalSpreadOptionKirkEngine(); case "GENERICMONTECARLOENGINE": return CreateGenericMonteCarloEngine(additionalParams); default: return DefaultEngine(exercise); } } } private static IEngine DefaultEngine(OptionExercise exercise, params object[] additionalParams) { return string.IsNullOrWhiteSpace(OptionEngineRepository.SpreadDefaultEngine) ? new AnalyticalSpreadOptionKirkEngine() : OptionEngineRepository.CreateEngine(OptionEngineRepository.SpreadDefaultEngine); } } }