using CustomHostingDemo.Logging; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Ninject; using Ninject.Syntax; using System; using System.CommandLine; using System.CommandLine.Binding; using System.CommandLine.Builder; using System.CommandLine.Parsing; using System.IO; using System.Reflection; namespace CustomHostingDemo { class Program { static void Main(string[] args) { var kernel = new StandardKernel(); var config = new ConfigurationBuilder() .SetBasePath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false) .AddJsonFile(Path.Combine(Environment.GetEnvironmentVariable("USERPROFILE"), "custom-demo.json"), optional: true, reloadOnChange: false) .Build(); kernel.Bind().ToConstant(config).InSingletonScope(); kernel.Bind().To().InSingletonScope(); kernel.Bind(typeof(Logger<>)).ToSelf().InSingletonScope(); kernel.Bind().To().InSingletonScope(); Console.WriteLine($"Hello {config["Hello"]}"); var logger = kernel.Get>(); logger.LogInformation("Informational Message"); logger.LogWarning("Ooopsie!"); var rootCommand = new RootCommand() { new HelloCommand(), }; var parser = new CommandLineBuilder(rootCommand) .UseMiddleware((invocationContext) => { var cmdArgs = new HelloCommand.HelloArgs(); var binder = new ModelBinder(); binder.UpdateInstance(cmdArgs, invocationContext.BindingContext); kernel.Bind().ToConstant(cmdArgs).InSingletonScope(); //invocationContext.BindingContext.AddService(typeof(HelloCommand.HelloArgs), () => cmdArgs); invocationContext.BindingContext.AddService(typeof(HelloCommand.DefaultHandler), () => { var handler = kernel.Get(); return handler; }); }) .UseDefaults() .Build(); parser.InvokeAsync(args).Wait(); } } }