public static IRosCoreConnectionAction GetTeardownAction(this RosCoreConfigurationOptions options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } var strategyName = options.TeardownStrategy?.Trim(); if (strategyName == null) { if (options.StartupStrategy != null && options.StartupStrategy.Equals("launch", StringComparison.InvariantCultureIgnoreCase)) { strategyName = "close"; } else { strategyName = "none"; } } if (strategyName.Equals("none", StringComparison.OrdinalIgnoreCase)) { return(new NoAction()); } if (strategyName.Equals("close", StringComparison.InvariantCultureIgnoreCase)) { return(new ShutdownRosCoreAction()); } if (strategyName.Equals("script", StringComparison.CurrentCultureIgnoreCase)) { if (options.TeardownScriptPath == null) { throw new Exception("No script"); // TODO: Correct exception } return(ScriptAction.Create(options.TeardownScriptPath)); } throw new InvalidOperationException($"The provided roscore teardown strategy {options.TeardownStrategy} is not supported."); }