/// <summary>
        /// Use the public methods of an instance object as handlers
        /// </summary>
        /// <param name="handlers"></param>
        /// <param name="instance"></param>
        /// <returns></returns>
        public static IHandlerSetup UsePublicMethodsAsHandlers(this IHandlerSetup handlers, object instance, Func <string, string> getDescription = null, Func <string, string> getUsage = null, Func <string, string> getGroup = null)
        {
            Assert.ArgumentNotNull(handlers, nameof(handlers));
            var source = new InstanceMethodHandlerSource(instance, getDescription, getUsage, getGroup);

            return(handlers.AddSource(source));
        }
 public EngineBuilder(IHandlerSetup handlers = null, IOutputSetup output = null, IEnvironmentSetup environments = null, IParserSetup parsers = null, EngineEventCatalog events = null, EngineSettings settings = null)
 {
     _handlers     = handlers ?? new HandlerSetup();
     _eventCatalog = events ?? new EngineEventCatalog();
     _output       = output ?? new OutputSetup();
     _environments = environments ?? new EnvironmentSetup();
     _parsers      = parsers ?? new ParserSetup();
     _settings     = settings ?? new EngineSettings();
 }
        /// <summary>
        /// Tell the HandlerSetup to use Ninject to scan for and resolve handler types in your solution.
        /// </summary>
        /// <param name="handlers"></param>
        /// <param name="kernel"></param>
        /// <param name="verbExtractor"></param>
        /// <returns></returns>
        public static IHandlerSetup UseNinjectHandlerSource(this IHandlerSetup handlers, IKernel kernel, ITypeVerbExtractor verbExtractor = null)
        {
            Assert.ArgumentNotNull(handlers, nameof(handlers));
            Assert.ArgumentNotNull(kernel, nameof(kernel));

            var source = new NinjectHandlerSource(kernel, verbExtractor);

            return(handlers.AddSource(source));
        }
 /// <summary>
 /// Use the specified list of handler types, with the default instance resolver and
 /// default verb extractor
 /// </summary>
 /// <param name="handlers"></param>
 /// <param name="commandTypes"></param>
 /// <returns></returns>
 public static IHandlerSetup UseHandlerTypes(this IHandlerSetup handlers, params Type[] commandTypes)
 {
     Assert.ArgumentNotNull(handlers, nameof(handlers));
     Assert.ArgumentNotNull(commandTypes, nameof(commandTypes));
     return(handlers.UseHandlerTypes(commandTypes));
 }