using System.Collections.Generic;
public static void Main()
var args = new string[] {"/SCRIPT_NAME=DEALER_TRACK_KEEP_ALIVE", "/OEM_FAMILY=GM", "/COMPLAINT_CODE=\"0131\"", "/OUT_DIR=C:\\\\Applications\\\\DataFiles\\\\", "/KEEP_ALIVE_OPTION=1", "/STORY=\"Lorem ipsum #UPDATE#dolor sit amet\"", "/DEALER_TRACK_LOGIN_URL=https://blah",
"/DEALER_TRACK_UserID=myId", "/DEALER_TRACK_Password=myPwd12", "/DEALER_TRACK_ADVISOR_PASSWORD=\"asd\"", "/DEALER_TRACK_COMPANY_NUMBER=\"TT\"", "/RO_NUMBER=3464990", "/LINE_NUMBER=1", "/CAUSAL_PART_NUMBER=\"11546959:SL-N-BOLT (00293-CKT)\""};
new ScriptFactory().GetScriptData(args);
Console.WriteLine("Hello World");
public class ScriptFactory
public KeyValuePair<Type, IScriptOptions> GetScriptData(string[] args)
string scriptName = args[0].Split('=')[1];
IScriptOptions options = default;
ParserResult<DTKeepAliveOptions> parseRes = Parse<DTKeepAliveOptions>(args)
.WithParsed(keepAliveOptions => Console.WriteLine("success"))
.WithNotParsed(errs => HandleParseError(typeof(DTKeepAlive), errs));
return new KeyValuePair<Type, IScriptOptions>(typeof(DTKeepAlive), options);
public ParserResult<T> Parse<T>(string[] args) where T : IScriptOptions
s.IgnoreUnknownArguments = true;
s.HelpWriter = Parser.Default.Settings.HelpWriter;
var scriptOptions = new List<string>();
for (int i = 0; i < args.Length; i++)
if (i > 0 && !args[i].EndsWith('='))
string option = $"--{args[i].TrimStart('/')}";
scriptOptions.Add(option);
return parser.ParseArguments<T>(scriptOptions);
private void HandleParseError(Type scriptType, IEnumerable<Error> errors)
var namedErrs = errors.Cast<NamedError>();
string exceptionText = string.Empty;
string errorParamsString = string.Empty;
var missedParamsNames = namedErrs.Where(e => e.Tag == ErrorType.MissingRequiredOptionError);
if (missedParamsNames.Any())
foreach (var err in missedParamsNames)
errorParamsString += err.NameInfo.NameText + " ";
exceptionText = $"Missed required parameter(s) {errorParamsString}for the {scriptType.Name} script";
foreach (var err in namedErrs)
errorParamsString += err.NameInfo.NameText + " ";
exceptionText = $"Error in parameters {errorParamsString} for the {scriptType.Name} script";
throw new Exception(exceptionText);
public class DTLoginOptions
[Option(Required = true)]
public string DEALER_TRACK_LOGIN_URL { get; set; }
[Option(Required = true)]
public string DEALER_TRACK_ADVISOR_PASSWORD { get; set; }
[Option(Required = true)]
public string DEALER_TRACK_COMPANY_NUMBER { get; set; }
[Option(Required = true)]
public string OUT_DIR { get; set; }
[Option(Required = true)]
public string DEALER_TRACK_UserID { get; set; }
[Option(Required = true)]
public string DEALER_TRACK_Password { get; set; }
public class DTKeepAliveOptions : DTLoginOptions, IScriptOptions
[Option(Required = true)]
public string KEEP_ALIVE_OPTION { get; set; }
public interface IScriptOptions
public class DTKeepAlive {}