private static Func GetFactory()

in src/React.Core/JavaScriptEngineFactory.cs [288:344]


		private static Func<IJsEngine> GetFactory(IJsEngineSwitcher jsEngineSwitcher)
		{
			string defaultEngineName = jsEngineSwitcher.DefaultEngineName;
			if (!string.IsNullOrWhiteSpace(defaultEngineName))
			{
				var engineFactory = jsEngineSwitcher.EngineFactories.Get(defaultEngineName);
				if (engineFactory != null)
				{
					return engineFactory.CreateEngine;
				}
				else
				{
					throw new ReactEngineNotFoundException(
						"Could not find a factory that creates an instance of the JavaScript " +
						"engine with name `" + defaultEngineName + "`.");
				}
			}

			if (jsEngineSwitcher.EngineFactories.Count == 0)
			{
				throw new ReactException("No JS engines were registered. Visit https://reactjs.net/docs for more information.");
			}

			var exceptionMessages = new List<string>();
			foreach (var engineFactory in jsEngineSwitcher.EngineFactories.GetRegisteredFactories())
			{
				IJsEngine engine = null;
				try
				{
					engine = engineFactory.CreateEngine();
					if (EngineIsUsable(engine))
					{
						// Success! Use this one.
						return engineFactory.CreateEngine;
					}
				}
				catch (JsEngineLoadException ex)
				{
					Trace.WriteLine(string.Format("Error initialising {0}: {1}", engineFactory, ex.Message));
					exceptionMessages.Add(ex.Message);
				}
				catch (Exception ex)
				{
					Trace.WriteLine(string.Format("Error initialising {0}: {1}", engineFactory, ex));
					exceptionMessages.Add(ex.ToString());
				}
				finally
				{
					if (engine != null)
					{
						engine.Dispose();
					}
				}
			}

			throw new ReactEngineNotFoundException("There was an error initializing the registered JS engines. " + string.Join(Environment.NewLine, exceptionMessages));
		}