示例#1
0
 public CommandLineActionFactory(
     AssemblyModel model,
     Func <Type, object> objectFactory,
     TypeConverterCollection typeConverterCollection,
     MethodMapper methodMapper)
 {
     _assemblyModel           = model;
     _objectFactory           = objectFactory;
     _typeConverterCollection = typeConverterCollection;
     _methodMapper            = methodMapper;
 }
示例#2
0
        private static IReadOnlyCollection <CommandLineAction> ResolveActions(
            Func <Type, object> objectFactory,
            TypeConverterCollection typeConverters,
            CommandLineArgumentList commandLineArgs,
            AssemblyModel model)
        {
            var methodMapper = new MethodMapper(new ParameterMapper());

            return
                (new CommandLineActionFactory(
                     model, objectFactory, typeConverters, methodMapper)
                 .Resolve(commandLineArgs));
        }
示例#3
0
        public static object Execute(CommandLineConfiguration config, params string[] args)
        {
            // Defensively copy the configuration into local variables
            var helpOutput = config.HelpOutput;

            _traceOutput = config.TraceOutput;
            var assembliesToScan = config.AssembliesToScan.ToList();
            var typeConverters   = new TypeConverterCollection(config.TypeConverters);
            var objectFactory    = config.ObjectFactory;

            var commandLineArgs = CommandLineArgumentList.Parse(args);

            if (commandLineArgs.TraceToStandardOutput)
            {
                _traceOutput = helpOutput;
            }

            var model = AssemblyModel.Scan(assembliesToScan);
            var resolvedCommandLineActions = ResolveActions(
                objectFactory, typeConverters, commandLineArgs, model);

            if (IsReadyForExecution(commandLineArgs, resolvedCommandLineActions))
            {
                var commandLineAction = resolvedCommandLineActions.Single();

                try
                {
                    return(commandLineAction.Invoke());
                }
                catch (TypeConversionException e)
                {
                    helpOutput(e.Message);
                    _traceOutput(e.ToString());

                    return(null);
                }
            }
            else
            {
                var helpBuilder = new HelpBuilder(XmlCommentsRepository.LoadFor(assembliesToScan));

                helpOutput(
                    helpBuilder.GenerateHelp(commandLineArgs, model, resolvedCommandLineActions));

                return(null);
            }
        }