public ConsoleArgsState(string[] args) { ArgFinder finder = new ArgFinder(); _findResult = finder.FindAllArgs(Assembly.GetEntryAssembly()); ConsoleParser parser = new ConsoleParser(); _parseResult = parser.ParseArgs(args); ArgAssigner assigner = new ArgAssigner(); _assignResult = assigner.AssignValues(_findResult, _parseResult); }
public AssignResult AssignValues(FindResult findResult, ParseResult parseResult) { ExecutionLog errorLog = ExecutionLog.CreateErrorLog(); HashSet<string> mandatoryFullNames = new HashSet<string>(findResult.IndexedInstances.MandatoryFullNames); foreach (string argName in parseResult.Arguments.Keys) { List<ArgInstance> instances = findResult.IndexedInstances.GetArgInstancesForName(argName); var instancesForName = findResult.IndexedInstances.GetArgInstancesForName(argName); if (instances.Count == 0) { errorLog.Add("Arg named [{0}] does not exist.", argName); } else if (instances.Count > 1) { errorLog.Add( "Arg [{0}] is ambiguous. It can refer to: [{1}].", argName, ToStringByFullNames(instances)); } else { ArgInstance instance = instances[0]; SetArgInstanceValueOrAddError(instance, parseResult.Arguments[argName], errorLog); mandatoryFullNames.Remove(instance.FullName); } } if (mandatoryFullNames.Count > 0) { List<string> sortedMandatoryArgsNotSet = new List<string>(mandatoryFullNames); sortedMandatoryArgsNotSet.Sort(); errorLog.Add("Mandatory Args [{0}] were not explicitly set.", string.Join(", ", sortedMandatoryArgsNotSet)); } return new AssignResult(errorLog); }